簡體   English   中英

僅在滿足特定條件時選擇最后記錄

[英]Select last records only if a certain condition is met

我有一個包含ID,WorkerID,IsActive標志(1或0)和LocalTime的表。 每次工作人員處於活動狀態或不處於活動狀態時,都會使用WorkerID,1或0標志記錄以及時間(LocalTime)創建一條記錄。

我想插入一個新表中:從該表中,對於每個唯一的WorkerID,僅當該記錄的IsActive標志為1時,才為該唯一的WorkerID選擇具有最新LocalTime的記錄的WorkerID,LocalTime和LocalTime。對於WorkerID,具有最新LocalTime的記錄的IsActive值為1,請選擇它。 否則,如果對於WorkerID,具有最新LocalTime的記錄的IsActive值為0,請不要選擇它。

例:

ID  WorkerID    IsActive    LocalTime
1   11      1       21/04/2015
2   22      0       22/04/2015
3   11      0       21/04/2015
4   22      1       22/04/2015

只能選擇ID為4的記錄。

--get unique worker ids
select distinct WorkerId
from MyTable a
--which are active
where IsActive=1
--that don't have any worker ids on a more recent time
--(ignoring status as if there's a more recent active record for 
--this worker we want that record, not this one; if there's a more 
--recent inactive record we don't want this one anyway)
and not exists
(
    select top 1 1
    from MyTable b
    where b.WorkerId = a.WorkerId
    and b.LocalTime > a.LocalTime
)

使用CROSS APPLY

Select * From Worker w1
Cross Apply(Select * From(Select Top 1 * From Worker w2 
                          Where w1.WorkerID = w2.WorkerID
                          Order By w2.ID desc) t 
            Where t.IsActive = 1 And t.ID = w1.ID) ca

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM