SQL,难以获取数据查询

时间:2014-04-03 20:44:33

标签: mysql sql

假设我有这样一张桌子:

+-----+---------+-------+
| ID  | TIME    | DAY   |
+-----+---------+-------+
|  1  |    1    |   1   |
|  2  |    2    |   1   |
|  3  |    3    |   1   |
|  1  |    1    |   2   |
|  2  |    2    |   2   |
|  3  |    3    |   2   |
|  1  |    1    |   3   |
|  2  |    2    |   3   |
|  3  |    3    |   3   |
|  1  |    1    |   4   |
|  2  |    2    |   4   |
|  3  |    3    |   4   |
|  1  |    1    |   5   |
|  2  |    2    |   5   |
|  3  |    3    |   5   |
+-----+---------+-------+

我想获取一个表格,该表格代表2个ID,这些ID在过去3天内获得最大的TIME总和(在DAY列中意味着从3到5)

所以正确的结果是:

+-----+---------+
| ID  | SUM     |
+-----+---------+
|  3  |    9    |
|  2  |    6    |
+-----+---------+

原始表格更大,更复杂。所以我需要一种通用的方法。

提前致谢。

2 个答案:

答案 0 :(得分:1)

所以我才知道MySQL使用的是LIMIT而不是TOP ......

fiddle

CREATE TABLE tbl (ID INT,tm INT,dy INT);

INSERT INTO tbl (id, tm, dy) VALUES
 (1,1,1)
,(2,2,1)
,(3,3,1)
,(1,1,2)
,(1,1,1)


SELECT ID
      ,SUM(SumTimeForDay) SumTimeFromLastThreeDays 
  FROM (SELECT ID
              ,SUM(tm) SumTimeForDay
          FROM tbl
         GROUP BY ID, dy
        HAVING dy > MAX(dy) -3) a
 GROUP BY id
 ORDER BY SUM(SumTimeForDay) DESC
 LIMIT 2

答案 1 :(得分:0)

select t1.`id`, sum(t1.`time`) as `sum` 
from `table` t1
inner join ( select distinct `day` from `table` order by `day` desc limit 3 ) t2
      on t2.`da`y = t1.`day` 
group by t1.`id`
order by sum(t1.`time`) desc
limit 2