sql - GROUP BY 和 ORDER BY

标签 sql mysql

<分区>

Possible Duplicate:
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)。好的。然后它应该按具有最新日期(按日期降序排序)的两个条目(组内)之一排序。这个案例是日期为 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 的最后一个,这就是我希望将其分组的原因。

最佳答案

使用:

  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)

关于sql - GROUP BY 和 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119576/

相关文章:

MYSQL - NOT 与 var=false

sql - 如何使用触发器刷新物化 View ?

sql - 将我的 MS SQL Server 知识转移到 MySQL 的学习资源

mysql - SQL如何根据条件计算每个ID的最后条目

mysql - 如何从数据库中获取所有表的列表以及列名

c# - 将sql查询命令超时设置为max的负面影响

javascript - 在 express 中访问 Controller 的查询结果

mysql - 对混合文本和数字的数据进行自然排序(然后是更多文本*有时*)

php - 同步同一 MySQL 数据库中不同表中的两行

javascript - 按表格标题展开/折叠 HTML 表格