Re: [請益] 這樣的統計要如何寫?
※ 引述《jami520 (我的生命因你而發光)》之銘言:
: 目前我有的資料表db1
: 姓名name 分數grade 日期gdate
: 每天都會有許多學員的分數資料
: 若現在我想做每天學員的分數是否為近五日新低的人數統計
: 舉例學員有十人 於3/1某A, 某B 這二人當日分數為從2/24-3/1的最低分數
: 那麼3/1統計的人數則為2
: 3/2若是某B, 某D, 某E這三人當日分數為2/25-3/2的最低分數
: 那麼3/2統計人數則為3
: 這樣如此就會有每天分數新低的人數統計資料了
: 那麼這樣SQL寫法要如何寫呢?
: 我有想到比較笨的方式,就是載出要統計區間的所有資料
: 然後用跑回圈個別紀錄學員每天的分數丟到陣列中
: 後續再針對每位學員的陣列再跑回圈來研判
: 不知道是否有辦法直接在SQL中就可以達到目的呢?
: 謝謝!
我的想法是先取得過去5天每個人的最低分(子查詢部份)
再用join的方式查詢 當天分數 <= 最低分 的總人數
SQL如下
SELECT COUNT(*)
FROM db1 AS a
INNER JOIN (
SELECT name, MIN(grade) AS min_grade
FROM db1
WHERE gdate BETWEEN DATE_ADD(NOW( ), INTERVAL -5 DAY)
AND DATE_ADD(NOW( ), INTERVAL -1 DAY)
GROUP BY name
) AS b ON a.name = b.name
WHERE a.grade <= b.min_grade
AND a.gdate = DATE_FORMAT(NOW( ), '%Y-%m-%d');
PS:如果要指定查詢哪一天的話,就將 NOW() 直接改成日期即可
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.40.20.219
※ 編輯: chenstin 來自: 114.40.20.219 (03/16 21:00)
推
03/17 06:50, , 1F
03/17 06:50, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):