所以我在我們公司的 postgresql 資料庫上有這個任務。
我需要找到相同 ID 之間日期的所有不連續性。這是它在 db 上的外觀示例。有 ID,接下來我們有列“valid_from”和“valid_to”。
正如您只能在第 1 行和第 2 行看到的那樣,“valid_to”到“valid_from”列之間存在不連續性。
在第 2>3>4 行之間一切正常。
id valid_from valid_to
1 Name_of_record1 10.10.2011 17:26 21.07.2021 02:47
2 Name_of_record1 28.08.2021 13:00 11.09.2021 21:12
3 Name_of_record1 11.09.2021 21:12 13.09.2021 05:42
4 Name_of_record1 13.09.2021 05:42 31.12.9999 00:00
uj5u.com熱心網友回復:
使用視窗函式LAG()可以從當前行之前的行中檢索列值,因此如果前一行valid_to值與實際行valid_from值不同,則存在不連續性。
SELECT id, valid_from::date, valid_to::date,
CASE WHEN valid_from::date != LAG(valid_to::date) OVER (PARTITION BY id ORDER BY valid_from)
THEN false ELSE true END AS continuity
FROM t;
LAG()將回傳null每組的第一行(具有相同 的行id,因為沒有具有相同 的前一行id)。Continuity設定true為第一行。
輸出:
如果continuity是false存在不連續性。
| ID | valid_from | 有效 | 連續性 |
|---|---|---|---|
| 1 | 2011-10-10 | 2021-07-21 | 噸 |
| 1 | 2021-08-28 | 2021-09-11 | F |
| 1 | 2021-09-11 | 2021-09-13 | 噸 |
| 1 | 2021-09-13 | 9999-12-31 | 噸 |
uj5u.com熱心網友回復:
您可以使用LEAD來確認這些值是連續的。例如
查詢#1
SELECT
*
FROM (
SELECT
*,
LEAD("valid_from",1,"valid_to") OVER (
PARTITION BY "rec_name"
ORDER BY "valid_from"
)="valid_to" as continuity
FROM
my_table
) t
ORDER BY "id";
| ID | rec_name | valid_from | 有效 | 連續性 |
|---|---|---|---|---|
| 1 | Name_of_record1 | 10.10.2011 17:26 | 21.07.2021 02:47 | 錯誤的 |
| 2 | Name_of_record1 | 28.08.2021 13:00 | 11.09.2021 21:12 | 真的 |
| 3 | Name_of_record1 | 11.09.2021 21:12 | 13.09.2021 05:42 | 真的 |
| 4 | Name_of_record1 | 13.09.2021 05:42 | 31.12.9999 00:00 | 真的 |
查詢#2
SELECT
*
FROM (
SELECT
*,
LEAD("valid_from",1,"valid_to") OVER (
PARTITION BY "rec_name"
ORDER BY "valid_from"
)="valid_to" as continuity
FROM
my_table
) t
WHERE continuity=true
ORDER BY "id";
| ID | rec_name | valid_from | 有效 | 連續性 |
|---|---|---|---|---|
| 2 | Name_of_record1 | 28.08.2021 13:00 | 11.09.2021 21:12 | 真的 |
| 3 | Name_of_record1 | 11.09.2021 21:12 | 13.09.2021 05:42 | 真的 |
| 4 | Name_of_record1 | 13.09.2021 05:42 | 31.12.9999 00:00 | 真的 |
在 DB Fiddle 上查看
讓我知道這是否適合您。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/317101.html
標籤:sql PostgreSQL
