我試圖獲得特定個體id(在本例中為'nest22')的所有記錄id,這些記錄id目前沒有加載,并且不是最新的。 我寫的獲取最新記錄ID的查詢是有效的,但是當我試圖用這個結果來過濾時,有些地方不對勁,我似乎不知道我做錯了什么
我想知道我做錯了什么。
SELECT record_id AS recid, individualid AS ind, load_status AS load
FROM tbl t1
LEFT JOIN (SELECT record_id, individualid , load_status, created_at
FROM tbl
INNER JOIN( SELECT individualid as indid,
MAX( created_at) as max_create
FROM tbl
GROUP BY individualid) ms ON individualid = indid
AND created_at = max_create
WHERE individualid LIKE 'est22'
and load_status NOT LIKE 'LOADED') t2 ON recid = record_id
WHERE load NOT LIKE 'LOADED'
and individualid LIKE'nest22'
and record_id = NULL
該表本身看起來像這樣
record_id | individualid | created_at | load_status
----------- -------------- ------------ ------------
1 |nest22 |9/16/2021 | PENDING
2 |nest22 |9/13/2021 | PENDING
3 |nest22 |9/10/2021 | PENDING
4 |nest22 |9/1/2021 | LOADED
5 |nest23 |9/10/2021 | PENDING
我想讓查詢回傳record_id的2 & 3
uj5u.com熱心網友回復:
這是給NOT IN的作業。讓我們從一個子查詢開始,獲得最近的合格記錄的日期。
SELECT individualid, MAX(created_at) creates_at
FROM tbl
WHERE load_status <> 'LOADED'。
GROUP BY individualid
然后,讓我們用另一個子查詢來獲取這些最新記錄的record_ids。
SELECT a.record_id
FROM tbl a
JOIN (
SELECT individualid, MAX(created_at) created_at
FROM tbl
WHERE load_status <> 'LOADED'。
GROUP BY individualid
) b ON a.individualid = b.individualid
AND a.created_at = b.created_at
然后,讓我們在一個主查詢中使用它。在這里檢查一下.
。SELECT record_id AS recid, individualid AS ind, load_status AS load
FROM tbl
WHERE record_id NOT IN (
SELECT a.record_id
FROM tbl a
JOIN (
SELECT individualid, MAX(created_at) created_at
FROM tbl
WHERE load_status <> 'LOADED'。
GROUP BY individualid
) b ON a.individualid = b.individualid
AND a.created_at = b.created_at
)
and load_status <> 'LOADED'/span>
and individualid = 'nest22'
uj5u.com熱心網友回復:
你還沒有回答你使用的是哪種DBMS,所以這里用標準SQL查詢來回答。
你想顯示所有行,除了
- 最新的行
- 帶有individualid <> 'nest22'的記錄 。
- load_status = 'LOADED'的rows
在這里,重要的是要考慮以什么順序來應用這些標準。如果我們只是挑選具有匹配的individualid和load_status的記錄,那么我們無法從這個資料集中看到其中的一條記錄是否是最新的記錄,因為我們不知道我們的標準是否已經洗掉了最新的記錄。我們將不得不再次查詢原始表。然而,如果我們先洗掉最新的行,我們就可以從該資料集中洗掉不需要的 individualid 和 load_status。
下面是兩個選項:
查詢 #1
查詢 #1 查詢#2 兩個查詢都認為created_at在表中是唯一的,所以最大的created_at意味著最新的行。
還有其他方法可以實作同樣的目的。最新的記錄是具有最大日期的記錄,這也可以表示為不存在其他具有更大日期的記錄,也就是說,我們可以使用 最后,看到你忘了告訴我們你的查詢中有一個語法錯誤,忘了回答關于 DBMS 的問題,忘了回答 record_id 在表中是否唯一,很可能是你沒有正確地描述這個任務。例如,如果這不是關于表中的最新行,而是關于nest22的最新行或最后未加載的行或nest22的最后未加載的行,那么你就必須相應地調整查詢。
標籤:select *
from tbl
where individualid = 'nest22'/span>
and load_status <> 'LOADED'
and created_at <> (select max(created_at) from tbl) 。
select *
from
(
select *
from tbl
order by created_at desc
offset 1 row
) without_newest
where individualid = 'nest22' >。
and load_status <> 'LOADED'。
EXISTS子句來實作。我們也可以按照降序對這些行進行編號(用ROW_NUMBER),并跳過第1行,因為那將是最新的。
