declare @a table(
id int
,名稱 nvarchar(50)
)
declare @b table(
廁所id int
,清潔度 nvarchar(50)
,時間 datetime
)
declare @c table(
廁所id int
,檢查的清潔度 nvarchar(50)
,時間 datetime
)
insert into @a
values
('1','1樓廁所')
,('2','2樓廁所')
insert into @b
values
('1','80','2021/07/09 09:15:02.222')
,('1','75','2021/07/09 13:15:02.222')
,('1','95','2021/07/09 16:15:02.222')
('2','80','2021/07/09 09:15:02.222')
,('2','75','2021/07/09 13:15:02.222')
,('2','95','2021/07/09 16:15:02.222')
insert into @b
values
('1','50','2021/07/09 09:10:02.222')
,('1','75','2021/07/09 13:17:02.222')
,('1','70','2021/07/09 15:55:02.222')
('2','0','2021/07/09 09:15:02.222')
,('2','60','2021/07/09 13:15:02.222')
,('2','80','2021/07/09 16:55:02.222')
A是清單 B執行表 C檢查表
要做一個監控 隨時看現在 A廁所的乾淨程度
依照BC 哪一個的檢查時間為最後當成值
我應該用CASE的方式去判斷嗎還是用IF或者有更好的方法?
是這樣??
declare @a table(
id int
,名稱 nvarchar(50)
)
declare @b table(
廁所id int
,清潔度 nvarchar(50)
,時間 datetime
)
declare @c table(
廁所id int
,檢查的清潔度 nvarchar(50)
,時間 datetime
)
insert into @a
values
('1','1樓廁所')
,('2','2樓廁所')
insert into @b
values
('1','80','2021/07/09 09:15:02.222')
,('1','75','2021/07/09 13:15:02.222')
,('1','95','2021/07/09 16:15:02.222')
,('2','80','2021/07/09 09:15:02.222')
,('2','75','2021/07/09 13:15:02.222')
,('2','95','2021/07/09 16:15:02.222')
insert into @c
values
('1','50','2021/07/09 09:10:02.222')
,('1','75','2021/07/09 13:17:02.222')
,('1','70','2021/07/09 15:55:02.222')
,('2','0','2021/07/09 09:15:02.222')
,('2','60','2021/07/09 13:15:02.222')
,('2','80','2021/07/09 16:55:02.222')
select 名稱
,清潔度
,時間
from (
select row_number() over(partition by id order by 時間 desc) Sort
,名稱
,清潔度
,時間
from ((
select *
from @b
)union(
select *
from @c
)) k
left join @a on id = 廁所id
) k
where Sort = 1