我的表格有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
有人可以帮助我吗?
答案 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)
答案 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)
修改强> 此代码已经过测试并且可以正常运行