我的日程表中有一個這樣的資料集,我必須檢查連續資料(按順序)是否正好相隔 1 小時
ID Time(varchar) Time(varchar) Date
129 "08:30:00" "15:45:00" "2022-06-22"
139 "08:30:00" "16:45:00" "2022-06-22"
149 "08:30:00" "17:45:00" "2022-06-22"
159 "08:30:00" "18:45:00" "2022-06-22"
169 "08:30:00" "19:45:00" "2022-06-22"
179 "08:30:00" "20:45:00" "2022-06-22"
189 "08:30:00" "21:30:00" "2022-06-22" // invalid case
199 "08:30:00" "22:45:00" "2022-06-22"
例如,有效案例為:149-139 = 1 小時,但無效案例為:189-179 = 0.45 小時
所以我基本上需要這樣的查詢:
Select count(*) from myScheduleTable where consecutiveBlocksTimeDifference = 1 hour;
這可以在postgres中實作嗎?
uj5u.com熱心網友回復:
這可以有更多的組合,比如如果第 1 行和第 2 行不等于 1 小時,那么第 1 行和第 2 行都無效或者什么!
但是,下面給出了一種方法,您可以根據具體用例對其進行調整。
select *,
case when
id > (select min(id) from schedule) then
case when
to_timestamp(concat(to_char(date1,'yyyy-mm-dd' ),' ',
time2),'yyyy-mm-dd hh24:mi:ss' ) -
to_timestamp(concat(to_char((coalesce(lag (date1)
over (order by id),date1)),'yyyy-mm-dd' ),' ',
(coalesce(lag(time2) over (order by id), time2)))
,'yyyy-mm-dd hh24:mi:ss' ) = interval '1 hour'
then
'valid'
else
'invalid'
end
else
'valid'
end
from schedule;
DB小提琴在這里。
請參閱此處進行count(*)查詢。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/504844.html
標籤:PostgreSQL
下一篇:如何在單個查詢中連接多個查詢?
