我有多个用户,有多个条目记录他们到达目的地的时间
不知何故,使用我的select查询,我只想显示每个唯一用户名的最新条目。
以下代码不起作用:
SELECT * FROM $dbTable GROUP BY xNAME ORDER BY xDATETIME DESC
这可以使名称分组正常,但只显示它们最近的条目,只显示它在SQL表中看到的第一个条目。
我想我的问题是,这可能吗?
这是我的数据样本:
john 7:00
chris 7:30
greg 8:00
john 8:15
greg 8:30
chris 9:00
我想要的结果应该只是
john 8:15
chris 9:00
greg 8:30
答案 0 :(得分:8)
像
这样的东西Select xName, MAX(xDATETIME) AS MaxDateVal
FROM $dbtable
GROUP BY xName
ORDER BY MaxDateVal
答案 1 :(得分:3)
SELECT xNAME, MAX(xDATETIME)
FROM $dbTable
GROUP BY xNAME
ORDER BY xDATETIME DESC
答案 2 :(得分:2)
查询的问题在于,当您使用GROUP BY
时,必须为不在GROUP BY
子句中的字段指定聚合函数。
您可能需要尝试以下方法:
SELECT u.*
FROM users u
INNER JOIN (
SELECT xName, MAX(xDatetime) max_time
FROM users
GROUP BY xName
) sub_u ON (sub_u.xName = u.xName AND
u.xDateTime = sub_u.max_time);
上述查询可按如下方式进行测试:
CREATE TABLE users (id int, xName varchar(100), xDateTime datetime);
INSERT INTO users VALUES (1, 'a', '2010-03-11 00:00:00');
INSERT INTO users VALUES (2, 'a', '2010-03-11 01:00:00');
INSERT INTO users VALUES (3, 'a', '2010-03-11 02:00:00');
INSERT INTO users VALUES (4, 'b', '2010-03-11 01:00:00');
INSERT INTO users VALUES (5, 'b', '2010-03-11 02:00:00');
INSERT INTO users VALUES (6, 'b', '2010-03-11 03:00:00');
INSERT INTO users VALUES (7, 'c', '2010-03-11 06:00:00');
INSERT INTO users VALUES (8, 'c', '2010-03-11 05:00:00');
-- Query Result:
+----+-------+---------------------+
| id | xName | xDateTime |
+----+-------+---------------------+
| 3 | a | 2010-03-11 02:00:00 |
| 6 | b | 2010-03-11 03:00:00 |
| 7 | c | 2010-03-11 06:00:00 |
+----+-------+---------------------+
如果您想按max_time
字段订购结果集,只需在查询末尾添加ORDER BY u.xDateTime DESC
即可。
答案 3 :(得分:0)
SELECT MAX(xNAME), MAX(xDATETIME) FROM $dbTable GROUP BY xNAME ORDER BY xDATETIME DESC
答案 4 :(得分:0)
你也可以这样做:
Select
xName, xDATETIME
from
$dbTable t1
where
xDATETIME =
(select max(xDATETIME) from $dbTable t2
where t1.xName=t2.xName)
order by xDATETIME DESC