mysql选择每种类型的最后一行

时间:2014-02-15 16:24:27

标签: mysql select

我的表格有ID,TYPE,NUMBER,DATE

示例,没有日期:

1 a 15
2 c 10
3 b 11
4 b 14
5 a 19
6 c 1
7 b 14
8 b 7

SELECT 1:

我想选择每种类型的最后一条记录......所以结果将是:

5 a 19 15.2.2014 16:00
8 b 7 15.2.2014 16:50
6 c 1 15.2.2014 17:00

现在是15.2.2014 17:01

SELECT 2:

我想从过去60分钟的每个最后一个类型中选择“SELECT 1”最大值(尽量不要选择“select from(SELECT 1)”,结果将是:

8 b 7 15.2.2014 16:50

有人可以帮助我吗?

4 个答案:

答案 0 :(得分:4)

SELECT id,type,date from table 
WHERE 
id in (SELECT max(id) FROM table GROUP BY type);

答案 1 :(得分:3)

您可以使用此exists子句执行第一项操作:

select t.*
from table t
where not exists (select 1
                  from table t2
                  where t2.type = t.type and t2.date > t.date
                 );

过去60分钟内的最大值与最大值相同。但是要获取仅在过去60分钟内的记录,请添加where条件:

select t.*
from table t
where t.date >= date_sub(getdate(), interval 1 hour) and
      not exists (select 1
                  from table t2
                  where t2.type = t.type and t2.date > t.date
                 );

请注意,这些查询假设您需要基于date列的最新行。您可以使用id列执行相同的逻辑。

答案 2 :(得分:2)

试试这个:

select *
from Table1
where id in (select max(id) from Table1 group by type)

fiddle

答案 3 :(得分:0)

你可以用这个查询来做到这一点

(SELECT * FROM example WHERE type="a" ORDER BY ID DESC LIMIT 1)
UNION
(SELECT * FROM example WHERE type="b" ORDER BY ID DESC LIMIT 1)

修改 此代码已经过测试并且可以正常运行