GROUP BY和ORDER BY

时间:2010-11-07 20:40:27

标签: sql mysql

  

可能重复:
  SQL ORDER BY total within GROUP BY

SELECT *
FROM users_pm_in
WHERE uID = '1'
GROUP BY dialog_id
ORDER BY date DESC

不能正常工作。我想要做的是分组到dialog_id ..然后所有与dialog_id按日期排序,然后按日期排序所有..

所以:

id | uID | bID | msg     | dialog_id | date
--------------------------------------------------
 1 | 1   | 2   | Hello   | 1         | 1289158631
 2 | 2   | 1   | Hi?     | 1         | 1289158691
 3 | 1   | 2   | Wazzaa? | 1         | 1289158931

dialog_id的两个条目获得1(使用GROUP BY)。好。然后它应该通过具有最新日期(按日期desc排序)的两个entrys(组内)中的一个来排序。这个案件的日期是1289158931。

如何做到这一点?

更新:

我想出来的是什么:

while($row = mysql_fetch_array($query)){
    echo $row["msg"] // it should echo "Wazzaa?"
    echo $row["id"] // it should give me id 3
}

它给了我每个dialog_id的最后一个,这就是为什么我希望它分组。

1 个答案:

答案 0 :(得分:4)

使用:

  SELECT a.id, 
         a.msg
    FROM USERS_PM a
   WHERE a.dialog_id = 1
     AND 1 IN (a.uid, a.bid)
ORDER BY a.date DESC
   LIMIT 1

...或:

SELECT a.id, 
       a.msg
  FROM USERS_PM a
  JOIN (SELECT t.dialog_id,
               MAX(t.date) AS max_date
          FROM USERS_PM t
      GROUP BY t.dialog_id) b ON b.dialog_id = a.dialog_id
                             AND b.max_date = a.date
 WHERE a.dialog_id = 1
   AND 1 IN (a.uid, a.bid)