我觉得这应该很容易,但我很难得到它。我们有一个包含UnitID,DateTimeStamp和UnitStatus的表。像这样:
如果他们的最后一个UnitStatus是LO,我试图找到每个单元的最新记录(基于DateTimeStamp)。所以在屏幕截图中,我采用了一个示例数据库,我希望它能够返回:
E02 2017-02-06 03:00:00 LO .....
E04 2017-02-06 06:00:00 LO
(它不会返回E03,因为E03在其LO的UnitStatus之后有一个AV的UnitStatus)
我尝试使用不同的where语句执行max(cdts)。将查询连接到使用max(cdts)的另一个查询。但无论我尝试什么,我都无法得到我正在寻找的结果。
答案 0 :(得分:0)
试试这个。 更新阅读更新后的问题后,我已更新了我的回答
SELECT tbl1.*
FROM defaulttable as tbl1
RIGHT JOIN
(
SELECT UnitStatus FROM defaulttable
WHERE UnitStatus = 'LO'
) as tbl2
ON tbl1.UnitStatus != tbl2.UnitStatus
WHERE tbl1 != 'LO'
ORDER BY tbl1.DateTimeStamp
答案 1 :(得分:0)
尝试使用desc关键字
SELECT * from table
WHERE UnitStatus = 'LO'
ORDER BY DateTimeStamp desc
答案 2 :(得分:0)
尝试使用window function row_number获取每个UnitID的最新记录
Select *
From (
Select
t.*,
Row_number() over (partition by UnitID order by datetimestamp desc) rn
From your_table t
Where UnitStatus = 'LO'
) t where rn = 1
答案 3 :(得分:0)
with cte as (
select *,
Row_number() over (partition by UnitID order by DateTimeStamp desc) as rn
from theTable
)
select *
from cte
where rn = 1
and UnitStatus = 'LO'
答案 4 :(得分:0)
SELECT DISTINCT
检索UnitID,OUTER APPLY
ed subselect检索具有最新状态的单位ID' LO':
with t as (select distinct unitid from SO42060982)
select t.*, sub.*
from t
outer apply
(select top 1 * from SO42060982 sub
where t.UnitID = sub.UnitID order by DateTimeStamp desc) sub
where sub.UnitStatus = 'LO'
答案 5 :(得分:0)
使用ROW_NUMBER()函数获取上面指定的每个UnitId的最新记录。作为第二步根据他们的rowindex和Status过滤记录,那么我认为你应该能够实现你想要的东西
第1步
SELECT U.*,
ROW_NUMBER() OVER (PARTITION BY UNITID ORDER BY DATETIMESTAMP DESC) SNO
INTO #UNITSTEMP
FROM UNITS U
第2步
SELECT DISTINCT * FROM #UNITSTEMP WHERE SNO = 1 AND UNITSTATUS = 'LO'