希望這是一個簡單的問題,我只是想錯了。
id_1我在和之間有關聯id_2。id_1和之間存在 1->n 的關系id_2。即,如果不id_2存在,id_1則默認值為-1。這看起來像:
id_1 id_2 info
---- | ---- | ----
120 -1 'dont'
120 444 'show'
123 -1 'test'
124 -1 'hello'
125 -1 'world'
125 123 'oh wait'
126 -1 'help'
126 201 'me'
127 -1 'sql'
127 206 'hell'
基本上,我想要一個 SQL 查詢,它與.id_2關聯的最高id_1,給定IN來自id_1. 如果我不能有一個IN也很好的陳述,我只是在嘗試優化其他東西。
以下是給定id_1包含(123,124,125,126,127)和id_2包含的答案(-1,-1,123,201,206):
id_1 id_2 info
---- | ---- | ----
123 -1 'test'
124 -1 'hello'
125 123 'oh wait'
126 201 'me'
127 206 'hell'
請注意id_1 120最終如何被排除在外。我試過了:
SELECT DISTINCT id_1, id_2, info
FROM ids
WHERE
id_1 IN (123, 124, 125, 126, 127) AND
id_2 IN (-1, -1, 123, 201, 206)
但這id_2為單個id_1.
我也試過了GROUP BY,id_2但這只給了我一個id_1-1。
SELECT id_1, id_2, info
FROM ids
WHERE
id_1 IN (123, 124, 125, 126, 127) AND
id_2 IN (-1, -1, 123, 201, 206)
GROUP BY id_2
結果是:
id_1 id_2 info
----- | ---- | ----
123 -1 'test'
125 123 'oh wait'
126 201 'me'
127 206 'hell'
注意缺少id_1的124。
那么我如何撰寫這個查詢來獲得最新的、不同id_2的id_1?
uj5u.com熱心網友回復:
ROW_NUMBER如果在 MySQL 8 上,您可以使用:
WITH cte AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY id_1 ORDER BY id_2 DESC) rn
FROM ids
WHERE id_1 IN (123, 124, 125, 126, 127) AND
id_2 IN (-1, -1, 123, 201, 206)
)
SELECT id_1, id_2, info
FROM cte
WHERE rn = 1;
id_1在早期版本的 MySQL 中,您可以使用存在邏輯識別每個組的最大記錄:
SELECT i1.*
FROM ids i1
WHERE id_1 IN (123, 124, 125, 126, 127) AND
id_2 IN (-1, -1, 123, 201, 206) AND
NOT EXISTS (
SELECT 1
FROM ids i2
WHERE i2.id_1 = i1.id_1 AND
i2.id_2 > i1.id_2 AND
i2.id_1 IN (123, 124, 125, 126, 127) AND
i2.id_2 IN (-1, -1, 123, 201, 206)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/417213.html
標籤:
上一篇:在SQL中插入多序列資料
下一篇:查找Maxmysql的Max
