[英]Select one specfic row from each user by a different time
我想為特定問題選擇最后一個答案。 我當前的解決方案僅從“ Nutzer1237”中選擇問題,但我也希望從“ Nutzer1234”中獲得最后一個答案。
SELECT pid, frage, antwort, user, created_at
FROM antwortenverlauf
WHERE frage = 'Risiko: Wie empfinden Sie die Kommunikation mit dem Kunden?'
AND (
user, created_at
)
IN (
SELECT user, MAX( created_at )
FROM antwortenverlauf
)
ORDER BY created_at DESC
對不起我的英語不好!
翻譯:frage =問題
antwort =答案
在官方手冊中 ,有3個如何解決此問題的示例。
任務:對於每件商品,找到價格最昂貴的經銷商 。
這個問題可以通過像這樣的子查詢來解決:
SELECT article, dealer, price
FROM shop s1
WHERE price=(SELECT MAX(s2.price)
FROM shop s2
WHERE s1.article = s2.article);
前面的示例使用了一個關聯子查詢,該子查詢可能效率不高(請參見第13.2.10.7節“關聯子查詢”)。 解決該問題的其他可能性是在FROM子句或LEFT JOIN中使用不相關的子查詢。
不相關的子查詢:
SELECT s1.article, dealer, s1.price
FROM shop s1
JOIN (
SELECT article, MAX(price) AS price
FROM shop
GROUP BY article) AS s2
ON s1.article = s2.article AND s1.price = s2.price;
左聯接:
SELECT s1.article, s1.dealer, s1.price
FROM shop s1
LEFT JOIN shop s2 ON s1.article = s2.article AND s1.price < s2.price
WHERE s2.article IS NULL;
LEFT JOIN的工作原理是,當s1.price達到最大值時,不存在更大的s2.price且s2行的值將為NULL。
您的查詢按預期方式工作,以Nutzer1237
作為“用戶”給出記錄,因為在子查詢中,您正在查找具有最近時間戳記的記錄: MAX( created_at )
而不將每個user
的結果分組。
然后,您必須使用以下查詢在子查詢中將每個user
的結果分組:
SELECT user, MAX( created_at )
FROM antwortenverlauf
GROUP BY user
注意:還請確保您要查找的frage
列的值不包含不希望的空格或其他字符。
但是,您的查詢不會得到您想要的結果,因為您在查找MAX(created_at)
未考慮frage
列。 您必須在子查詢中移動WHERE
條件。 您的最終查詢將如下所示:
SELECT pid, frage, antwort, user, created_at
FROM antwortenverlauf
WHERE (user, created_at)
IN (
SELECT user, MAX( created_at )
FROM antwortenverlauf
WHERE frage = 'Risiko: Wie empfinden Sie die Kommunikation mit dem Kunden?'
GROUP BY user
)
ORDER BY created_at DESC
您應該已經閱讀@fancyPants的答案
SELECT pid, frage, antwort, user, created_at
FROM antwortenverlauf a1
WHERE frage = 'Risiko: Wie empfinden Sie die Kommunikation mit dem Kunden?'
AND (user, created_at) IN (SELECT user, MAX( created_at )
FROM antwortenverlauf a2
WHERE a1.frage=a2.frage
GROUP BY USER)
ORDER BY created_at DESC
SELECT pid, frage, antwort, user, created_at
FROM antwortenverlauf
WHERE frage = 'Risiko: Wie empfinden Sie die Kommunikation mit dem Kunden?'
AND (
user, created_at
)
IN (
SELECT user, MAX( created_at )
FROM antwortenverlauf
GROUP BY USER // **this is the only difference**
)
ORDER BY created_at DESC
在您的代碼中,內部查詢僅返回一個原始問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.