我必須在 sql 中創建一個代碼,它允許我找到連續兩天沒有作業的員工的 id 我的資料具有以下結構:
| id_emp | 日期 | id_center |
|---|---|---|
| 0001 | 2020-12-11 | 0045 |
| 0001 | 2020-12-12 | 0045 |
| 0001 | 2020-12-13 | 0045 |
| 0002 | 2020-12-11 | 0047 |
| 0002 | 2020-12-13 | 0047 |
| 0003 | 2020-12-11 | 0043 |
| 0003 | 2020-12-12 | 0043 |
| ... | ... | ... |
要回傳的表必須結構如下:
| id_emp |
|---|
| 0002 |
uj5u.com熱心網友回復:
測驗這個:
WITH cte AS (
SELECT id_emp, DATEDIFF(date, LAG(date) OVER (PARTITION BY id_emp, id_center ORDER BY date)) = 1 consecutive
FROM src_table
),
SELECT id_emp
FROM cte
GROUP BY id_emp
HAVING NOT SUM(consecutive)
uj5u.com熱心網友回復:
select distinct id_emp
from mystery_table_name
where id_emp not in (
select distinct id_emp
from mystery_table_name a
join mystery_table_name b on b.id_emp=a.id_emp and b.id_center=a.id_center and b.date=a.date interval 1 day
)
雖然在你的表中尋找作業時間和地點的員工很奇怪,并且會遺漏從未作業過的員工。你肯定有一張員工表。
如果在 mysql 8 或 mariadb 10.2 或更高版本上,Akina 的答案可能會更高效,尤其是在您沒有(id_emp,id_center,date)索引的情況下。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399385.html
標籤:mysql
下一篇:從資料庫表中獲取相互關系
