簡體   English   中英

在不同的時間從每個用戶中選擇一個特定的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM