使用where和group by选择列值最小的行

时间:2013-09-02 11:03:40

标签: mysql sql greatest-n-per-group

样本表:

id------user_id------grade_id------time_stamp

1---------100----------1001---------2013-08-29 15:07:38

2---------101----------1002---------2013-08-29 16:07:38

3---------100----------1001---------2013-08-29 17:07:38

4---------102----------1003---------2013-08-29 18:07:38

5---------103----------1004---------2013-08-29 19:07:38

6---------105----------1002---------2013-08-29 20:07:38

6---------100----------1002---------2013-08-29 21:07:38

我希望仅在user_id = 100 grade_id time_stamp is least的{​​{1}}时选择grade_id组的行。

所以,从上表中可以看出:

第1行,因为time_stamp grade_id(1001)

的值最小has least value for user_id 105

但不是第2行,因为我只想要特定 grade_id

的1行

也不是第6行,因为特定的 grade_id {{1}}。

我尝试了一些基本的东西,显然不值得发布。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以尝试嵌套查询:

SELECT grade_id, COUNT(grade_id) FROM SAMPLE_TABLE ST WHERE time_stamp = (SELECT MIN(time_stamp) FROM SAMPLE_TABLE STT WHERE STT.grade_id = ST.grade_id) AND user_id = 100 GROUP BY grade_id;  

在这种情况下,嵌套查询将为每个特定的“grade_id”提供最小时间戳,您可以在WHERE过滤器中使用它。

答案 1 :(得分:1)

SELECT t.*
FROM tableX AS t
  JOIN
    ( SELECT grade_id, MIN(time_stamp) AS time_stamp
      FROM tableX
      GROUP BY grade_id
    ) AS g
      ON  g.grade_id = t.grade_id
      AND g.time_stamp = t.time_stamp
WHERE t.user_id = 100 ;