作者chenstin (orz)
看板PHP
标题Re: [请益] 这样的统计要如何写?
时间Sat Mar 16 20:57:49 2013
※ 引述《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)
1F:推 jami520:感谢回文提供思考方向,目前用回圈可写得出,不过很没效率 03/17 06:50