2017-02-06 3 views
0

나는 이것이 쉬워야한다고 느낀다. 그러나 나는 그것을 얻는데 어려움을 겪고있다. UnitID, DateTimeStamp 및 UnitStatus가있는 테이블이 있습니다. 그래서 같이 :SQL 특정 기준을 충족하는 최신 기록 찾기

enter image description here

나는 마지막 UnitStatus가 LO 인 경우 각 단위 (DateTimeStamp 기준) 최신 기록을 찾기 위해 노력하고있어. 스크린 샷에 내가 가지고 찾고있을 것이다 샘플 데이터베이스의 찍은 그래서 그것은 반환 :

E02 2017-02-06 03:00:00 LO ..... 
E04 2017-02-06 06:00:00 LO 

(E03는 AV의 UnitStatus을했기 때문에 그것은 LO 자신의 UnitStatus 후 E03를 반환하지 것)

나는 다른 곳에서 max (cdts)를 시도했다. max (cdts)를 사용하는 다른 쿼리에 쿼리 결합. 그러나 내가 무엇을 시도해도 나는 결코 내가 원하는 결과를 얻지 못한다.

답변

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 
0

SELECT * from table 
WHERE UnitStatus = 'LO' 
ORDER BY DateTimeStamp desc 
0

각 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 
에 대한 최신 기록을 얻기 위해 윈도우 함수의 ROW_NUMBER를 사용해보십시오 DESC 키워드로이 시도 내 대답 업데이트했습니다
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' 
0

SELECT DISTINCT은 유닛 ID, 위에서 지정한 각 UnitId의 최신 기록을 얻을 수

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' 
0

사용 ROW_NUMBER() 기능 : OUTER APPLY 에드 부속 선택은 가장 최근의 상태 'LO'와 unitIDs를 검색합니다. 두 번째 단계는 자신의 rowIndex에 및 상태에 따라 레코드를 필터링 할 때, 그 때 나는 당신이

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' 

찾고 있던 무엇을 달성 할 수 있어야한다고 생각합니다 위 쿼리를 실행하면 결과가 아래 스크린 샷과 같습니다. enter image description here