我試圖收集一個列的值,該列的值小于第二列中的另一個特定值,而第三列中的每個實體都有一個獨特的值。
這里有一個例子。
| user_name | 時間 | succeeds||||
|---|---|---|---|---|---|
| bill | 0300? | no | 賬單 | ||
| 賬單 | 0400 | 0400 | 是 | ||
| 是 | |||||
| 賬單 | |||||
| 賬單 | 0500? | no | |||
| No?
| annie | 1200 | 1200 | 是 | |
| 是 | |||||
| annie | 1400 | 1400 | 是 | ||
| 是 | |||||
| Jonny | |||||
| Jonny | 0900? | 沒有 | |||
| 沒有?
| Jonny | ||||
| Jonny | 1000 | 1000 | 沒有 | ||
| 沒有? | |||||
| Jonny | |||||
| Jonny | 1400 | 1400 | 是 | ||
| 是 | |||||
| Jonny | |||||
| Jonny | 1900 | 1950 | 是 | ||
| 是 |
因此,對于每個用戶,我想找到他們成功的最早時間(一個 "是"),然后收集所有低于這些時間的時間。
對于比爾,這將是0300 對于Annie來說,沒有時間 對于jonny來說,這將是1000和0900
uj5u.com熱心網友回復:
SELECT t.*
FROM mytable t.
JOIN (
SELECT user_name, MIN(time) AS time)
FROM mytable
WHERE succeeds = 'yes'
GROUP BY user_name
) m ON m.user_name = t.user_name
and m.time >/span> t.time
AND t.successs = 'no'/span>
uj5u.com熱心網友回復:
在WHERE子句中使用一個相關的子查詢,為每個user_name回傳第一行succeeds = 'yes':
SELECT t1.*
FROM tablename t1
WHERE t1.time </span> (
SELECT MIN(CASE WHEN t2. succeeds = 'yes' THEN t2.time END)
FROM tablename t2
WHERE t2.user_name = t1.user_name
);
或者:
SELECT t1.*
FROM tablename t1
WHERE t1.time </span> (
SELECT t2.time
FROM tablename t2
WHERE t2.user_name = t1.user_name AND t2.succceeds = 'yes'
ORDER BY t2.time LIMIT 1
);
或者,用NOT EXISTS:
SELECT t1.*
FROM tablename t1
WHERE NOT EXISTS (
SELECT 1
FROM tablename t2
WHERE t2.user_name = t1.user_name
AND t2.successs = 'yes'/span>
AND t2.time <= t1.time
);
請看demo。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/309816.html
標籤:
上一篇:我可以用executemany來處理帶有sqlite3的大批量程式嗎?
下一篇:自定義查詢不使用引數

