大家好,
想詢問一個SQL查詢的問題
請先看下圖
主要的查詢語句就是一般的Select * from Table where between 開始 and 結束
但是我想判斷資料表裡有出現兩筆資料的日期與MonitorID有相同的話,
就要使用RowFlag = 1的那筆資料,否則就是使用RowFlag = 0的那筆資料
再麻煩各位大神提供解答… 感恩
補充說明
不好意思,我的問法不太好,資料表本身就有RowFlag = 1或 = 0
平常的情況是日期或(Or)MonitorID會重複
(E.x 2021-02-25 17:00有7筆日期都一樣的資料(1~7MonitorID),
2021-02-25 17:01有7筆日期也是一樣的資料(1~7MonitorID),
總共14筆資料,接著每分鐘都還會多7筆日期都一樣,MonitorID是1~7的資料)
在資料表裡只要出現兩筆資料的日期與(And)MonitorID相同,
就要檢查RowFlag欄位,然後採用RowFlag=1的那筆資料,RowFlag=0的就不使用
然後其他的資料假如沒有出現日期與MonitorID相同的狀況,那就是使用RowFlag=0的資料
最後就會Select出日期與MonitorID沒有重複的全部資料
你參考看看~
declare @Tmp table(
Date_Time datetime
,MonitorID int
,Value decimal(18,2)
,S1ID int
,S2ID int
,S3ID int
)
insert into @Tmp
values('2021/3/11 13:00:01',2,-1.08,8,2,4)
,('2021/3/11 13:00:01',2,-1.08,8,2,4)
,('2021/3/11 13:00:02',1,-1.08,8,2,4)
,('2021/3/11 13:00:03',2,-1.08,8,2,4)
,('2021/3/11 13:00:04',3,-1.08,8,2,4)
select Date_Time
,MonitorID
,Value
,S1ID
,S2ID
,S3ID
,(case when Sort = 1 then 0 else 1 end) RowFlag
from (
select *
,Row_Number()over(partition by Date_Time,MonitorID order by MonitorID) Sort
from @Tmp
where Date_Time between '2021/3/11 13:00:01' and '2021/3/11 13:00:04'
) k
那就條件加上~只出現不重複資料就好了吧@@?
select Date_Time
,MonitorID
,Value
,S1ID
,S2ID
,S3ID
,(case when Sort = 1 then 0 else 1 end) RowFlag
from (
select *
,Row_Number()over(partition by Date_Time,MonitorID order by MonitorID) Sort
from @Tmp
where Date_Time between '2021/3/11 13:00:01' and '2021/3/11 13:00:04'
) k
where (case when Sort = 1 then 0 else 1 end) = 0
如下不重複的判斷
where (case when Sort = 1 then 0 else 1 end) = 0
再次感謝您願意花時間解答,我將您的解法稍微修改一下就完成了。
不過還是要補充說明一下,資料表本身就有RowFlag欄位,
假如碰到重複資料時,就只能採用RowFlag=1的那筆資料,
其餘的資料正常情況應該是不會重複,所以就是使用RowFlag = 0的資料
所以我將Over的條件改為Orderby RowFlag Desc
這樣就可以用RowFlag = 1的資料為主,RowFlag = 0的為次要。
大概是這樣,非常感謝您
select ( case when Date_time=日期 and MonitorID=ID then 1 else 0 end )as RowFlag,* from Table where between