改变我的整个问题,因为我收到很多关于发布图片的投诉。我还添加了一个与我的情况更相似的代码。我很抱歉我是新手,我尽量让你尽可能轻松。
我使用IBM DB2 DBMS
我有一个查询,它选择了许多总是有ID(应该是唯一的)记录(消息),状态(错误,已完成)和时间戳。我的查询如下;
select *
from tableone tr, tabletwo ms
where ms.TS BETWEEN '2017-09-15 00:00:00.000' and '2017-09-16 00:00:00.000'
and ms.ID=tr.ID
and ms.STATUS in ('ERROR','COMPLETED')
ORDER by tr.ID
ID对于一条消息是唯一的,消息可以在不同的时间戳上获得多个状态,这将导致多条记录作为上述查询的输出。
我希望只有包含唯一讯息和最新状态的记录。
我希望你们和女士们可以提前帮助,谢谢你们。
答案 0 :(得分:1)
Postgres,Oracle,SQL Server:
with CTE as
(
select t1.*, row_number() over(partition by t1.ID order by t1.Timestamp desc) rn
from MyTable t1
where t1.STATUS in ('ERROR','COMPLETED')
)
select *
from CTE
where rn = 1
的MySQL
select t1.*
from MyTable t1
inner join
(
select t2.ID, max(t2.Timestamp) as MaxT
from MyTable t2
where t2.STATUS in ('ERROR','COMPLETED')
group by t2.ID
) x3
on x3.ID = t1.ID
and x3.MaxT = t1.Timestamp
where t1.STATUS in ('ERROR','COMPLETED')
答案 1 :(得分:0)
试试吧
select *
from table_name a,
where a.STATUS in ('ERROR','COMPLETED')
and a.TimeStamp = (select max(b.TimeStamp)
from table_name b,
where a.ID=B.ID)
ORDER by a.ID
或
select *
from table_name a,
where a.STATUS in ('ERROR','COMPLETED')
and a.TimeStamp = (select Top(1) b.TimeStamp
from table_name b,
where a.ID=B.ID
order by b.TimeStamp desc)
ORDER by a.ID
答案 2 :(得分:0)
以下是基于您的值的代码。
我撤消了你的身份证,只获得了数字。我通过新ID执行了row_number并对其进行了排序以获得最新的。
使用漂亮的ID:
select * from (
select *,ROW_NUMBER() over(partition by TrueID order by timestamp DESC) as RN
from (
SELECT REVERSE(substring(reverse([ID]),1,2)) as TrueID
,[Status]
,[Timestamp]
FROM [LegOgSpass].[dbo].[statustable])x
)z where RN= 1
使用原始ID:
select * from (
select *,ROW_NUMBER() over(partition by ID order by timestamp DESC) as RN
from (
SELECT ID
,[Status]
,[Timestamp]
FROM [LegOgSpass].[dbo].[statustable])x
)z where RN= 1