使用mysql
返回组的最大值有点问题这是我的专栏
id | date | time | tran
--------+----------------+----------+----------
1 | 2014/03/31 | 17:23:00 | 1234
1 | 2014/03/31 | 17:24:00 | 3467
2 | 2014/03/31 | 17:26:00 | 2345
我的查询
SELECT id, max(date), MAX(time) , tran
FROM table
GROUP BY id
结果
id | date | time | tran
--------+----------------+----------+----------
1 | 2014/03/31 | 17:26:00 | 1234
2 | 2014/03/31 | 17:24:00 | 2345
预期答案应为
id | date | time | tran
--------+----------------+----------+----------
1 | 2014/03/31 | 17:26:00 | 3467
2 | 2014/03/31 | 17:24:00 | 2345
答案 0 :(得分:5)
您可以通过在同一个表格的最大值上使用自联接来实现此目的
SELECT t.* FROM
Table1 t
JOIN (
SELECT id, max(date) date, MAX(time) time , tran
FROM Table1
GROUP BY id) t2
ON(t.id=t2.id AND t.date=t2.date AND t.time=t2.time)
日期和时间的最大值之间可能存在差异,因此您应该使用单个字段为当前架构保存日期和时间,这是最佳的
SELECT t.* FROM
Table1 t
JOIN (
SELECT id,
max(concat(date,' ',time)) `date_time`
FROM Table1
GROUP BY id) t2
ON(t.id=t2.id AND (concat(t.date,' ',t.time))=t2.date_time )
答案 1 :(得分:3)
关于这个主题有一篇很棒的文章,每当我面对你的问题时都会阅读。您可能想要c heck it
应用于您的查询,它将如下所示:
SELECT *
FROM `table`
WHERE (
SELECT count(*) FROM `table` AS t
WHERE `t`.`id` = `table`.`id` AND `t`.`tran` <= `table`.`tran`
) < 2;
我最喜欢这种方式,您可以轻松获得前2,3或任意数量的行
答案 2 :(得分:0)
您是否尝试过GREATEST()函数:
SELECT GREATEST(field1, field2);
如果要从所有行获取mysql的绝对最大值,则可能需要使用以下查询:
SELECT GREATEST(MAX(field1), MAX(field2));
如果有帮助请告诉我
答案 3 :(得分:0)
您的查询:
SELECT id, max(date), MAX(time) , tran
FROM table
GROUP BY id
现在,您应该在查询中使用MAX(tran)和GROUP BY tran来获得预期的结果。
否则,您显然最终得到tran = 1234,因为您的查询仅获取日期为MAX(日期)且时间为MAX(时间)但tran值为正常tran值的行。另外,你正在进行GROUP BY id,而它必须是GROUP BY最大值。
因此,您的查询应更改为以下内容:
SELECT MAX(date), MAX(time), MAX(tran)
FROM table
GROUP BY tran