Re: [請益] 這樣的統計要如何寫?

看板PHP作者 (orz)時間11年前 (2013/03/16 20:57), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《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
文章代碼(AID): #1HH6nFsQ (PHP)
文章代碼(AID): #1HH6nFsQ (PHP)