我正在尝试获取时间戳记为rec_p_id = 4的最后一行。由于我不希望所有结果都在rec_p_id = 4的地方,因此我正在使用GROUP BY将其按send_p_id分组。
我的SQL查询如下所示:
SELECT *
FROM
( SELECT *
FROM chat
WHERE rec_p_id= "4"
ORDER
BY timestamp DESC) as sub
GROUP
BY send_p_id
我的桌子看起来像这样:
猫桌
c_id | send_p_id | rec_p_id | 时间戳记 |
---|---|---|---|
1个 | 3 | 4 | 2020-05-01 14:46:00 |
2 | 3 | 4 | 2020-05-01 14:49:00 |
3 | 3 | 4 | 2020-05-01 14:50:00 |
4 | 7 | 4 | 2020-05-01 12:00:00 |
5 | 4 | 7 | 2020-05-01 12:10:00 |
6 | 7 | 4 | 2020-05-01 12:20:00 |
7 | 9 | 4 | 2020-05-01 16:50:00 |
8 | 9 | 4 | 2020-05-01 17:00:00 |
我想得到最后一次出现:
c_id | send_p_id | rec_p_id | 时间戳记 |
---|---|---|---|
3 | 3 | 4 | 2020-05-01 14:50:00 |
6 | 7 | 4 | 2020-05-01 12:20:00 |
8 | 9 | 4 | 2020-05-01 17:00:00 |
但是相反,我得到了所有的第一个:
c_id | send_p_id | rec_p_id | 时间戳记 |
---|---|---|---|
1个 | 3 | 4 | 2020-05-01 14:46:00 |
4 | 7 | 4 | 2020-05-01 12:00:00 |
7 | 9 | 4 | 2020-05-01 16:50:00 |
我看到了我在此问题中使用的查询:mysql中的GROUP BY名称之前的ORDER BY日期和时间
它似乎对所有人都有效。我的查询出了什么问题?提前致谢。
期待您的预期结果似乎是您在寻找
select max(c_id) c_id, send_p_id, min(timestamp) timestamp
from chat WHERE rec_p_id= "4"
group by send_p_id
ORDER BY c_id
分组依据是聚合结果..
不使用聚合功能会产生不可预测的结果,并且在版本> 5.6中会产生错误
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句