看板 Database 關於我們 聯絡資訊
修改了幾個地方: 1. 加上測資 2. cross apply(join) 增加 curdate(今天日期) 3. 原 PO 推文裡以星期日為第 1 天 select t1.* from ( values ('2000-06-09'),('2000-06-10'),('2000-06-11'), ('2000-06-12'),('2000-06-13'),('2000-06-14'), ('2000-06-15'),('2000-06-16'),('2000-06-17') ) t1(birthday) cross apply ( values (convert(datetime,convert(date,getdate())),datepart(weekday,getdate())) ) t2(curdate,wday) where dateadd(year,datediff(year,birthday,curdate),birthday) between curdate - wday + 1 and curdate + 7 - wday ※ 引述《ken218 (ken218)》之銘言: : 本身跟 MSSQL 比較熟,所以用 SQL 回,不過我查過,相對應函數 MySQL 都有,上一篇 : 有提過了,所以不贅述。這邊針對生日那題回應 : SELECT NAME : FROM STUDENT : CROSS JOIN ( : Select Datepart(weekday, GETDATE()) D : ) X : WHERE : DATEADD(year, datediff(year, BIRTHDAY, Getdate()), Birthday) : Between convert(date, DATEADD(day, -(iif(d=1,8,d)-2),Getdate()) : And dateadd(day,8-(iif(d=1,8,d)), Getdate()) : 本來想要單純檢查 Dayofyear, 但是發現閏年有誤差。 : Cross join 單純是因為當日的 Datepart 不想打四次 : Convert date 因為 Getdate 包含時間,做起始日檢查要切掉時間才可以 : ※ 引述《sagwow (不是我)》之銘言: : : 資料庫名稱:MySQL : : 資料庫版本: : : 內容/問題描述: : : 大家好,小弟這邊有兩個問題想請教。 : : 第一個問題關於聚合函數,我有一個資料表"成績",有三個欄位 課程 學生 分數, : : 我想選出每個課程中最高分的人: : : select 課程, max(分數) : : from 成績 : : group by 課程 : : 但這樣我只能得到每個課程對應到的最高分,有簡便辦法得到該分數所對應到的學生嗎 : ? : : 現在我只想得到這種作法: : : select 學生 : : from 成績 : : where (課程, 分數) in (select 課程, max(分數) from 成績 group by 課程) : : ========================================================================== : : 第二個問題關於生日, : : 我有一個資料表"學生資料",裡面有學生的生日(年-月-日), : : 如果要判斷學生是否在這週生日要怎麼做呢? : : 如果是判斷這個月的話很簡單,但不知道怎麼去判斷生日是否和今天在同一週@@a : : 以上兩個問題麻煩大家幫解了,感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.232.34.48 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Database/M.1560174531.A.955.html
ken218: Cutekid 大的 where clause 乾淨多了。順帶一提,SQL serv 06/10 23:02
ken218: er Datepart 的 weekday return 原來可以調整,用 set dat 06/10 23:02
ken218: efirst = X 就可以了 06/10 23:02