以下SQL语句:
SELECT f.id,
f.front,
f.back,
h.statusChangedIdCode,
h.whenCreated,
h.historyIdCode
FROM dpod_site_flashcards AS f
JOIN dpod_site_historyItems AS h ON f.id = h.itemId
WHERE f.id = 216
AND historyIdCode = 'statusChanged'
ORDER BY h.whenCreated
Run Code Online (Sandbox Code Playgroud)
给我以下输出.如何更改它以便它只返回一行具有最新statusChangedIdCode的行?

SELECT f.id,
f.front,
f.back,
h.statusChangedIdCode,
h.whenCreated,
h.historyIdCode
FROM dpod_site_flashcards AS f
JOIN dpod_site_historyItems AS h ON f.id = h.itemId
WHERE f.id = 216
AND h.historyIdCode = 'statusChanged'
AND h.whenCreated = (select max(whenCreated)
from dpod_site_historyItems h2
where h2.itemId = h.itemId
and h2.historyIdCode = 'statusChanged')
ORDER BY h.whenCreated
Run Code Online (Sandbox Code Playgroud)
或者如果您有支持窗口函数的现代DBMS:
SELECT f.id,
f.front,
f.back,
h.statusChangedIdCode,
h.whenCreated,
h.historyIdCode
FROM dpod_site_flashcards AS f
JOIN (
select itemid,
historyIdCode,
whenCreated,
statusChangedIdCode,
row_number() over (partition by itemid order by whenCreated desc) as rn
from dpod_site_historyItems
where historyIdCode = 'statusChanged'
) h ON f.id = h.itemId AND h.rn = 1
WHERE f.id = 216
ORDER BY h.whenCreated
Run Code Online (Sandbox Code Playgroud)
当您选择dpod_site_flashcards.idLIMIT解决方案不会执行的多个行时,这两种情况都会起作用.
| 归档时间: |
|
| 查看次数: |
3379 次 |
| 最近记录: |