2017-04-04 72 views
0

我只選擇一個用戶發佈的一個值時遇到問題。使用DISTINCT選擇值且僅發佈最後一個值的SQL查詢

SELECT DISTINCT(zprava.id_prijemce), 
    uzivatele.jmeno, 
    uzivatele.prijmeni, 
    zprava.zobrazeno 
FROM zprava 
INNER JOIN uzivatele 
    ON zprava.id_prijemce = uzivatele.id 
WHERE id_uzivatele = $id_uzivatele 
ORDER BY datum DESC 

這就是我得到:

id_prijemce | jmeno | prijmeni | zobrazeno 
31   | Michal | Harych | 0 
31   | Michal | Harych | 1 
35   | Karel | Pepík | 0 

這是我需要得到:

id_prijemce | jmeno | prijmeni | zobrazeno 
31   | Michal | Harych | 1 
35   | Karel | Pepík | 0 

我不需要用 「zobrazeno」 更高的價值,以獲取該行,但最新發布,所以它也可以是0.

謝謝你的建議。

+0

請發佈'zprava'和'uzivatele'的表定義。 –

+0

現在我認爲查詢正在工作! –

回答

1

使用子查詢識別zprava表中的最新記錄,將其加回zpravauzivatele以獲得所需的結果。

SELECT 
    t1.id_prijemce, 
    t3.jmeno, 
    t3.prijmeni, 
    t1.zobrazeno 
FROM zprava t1 
INNER JOIN 
(
    SELECT id_prijemce, MAX(datum) AS max_datum 
    FROM zprava 
    GROUP BY id_prijemce 
) t2 
    ON t1.id_prijemce = t2.id_prijemce AND 
     t1.datum  = t2.max_datum 
INNER JOIN uzivatele t3 
    ON t1.id_prijemce = t3.id 
WHERE t1.id_uzivatele = $id_uzivatele 
ORDER BY t1.datum DESC 
+0

謝謝,但我不需要MAX值,而是最新插入到'zobrazeno'中的值。 –

+0

@RadekHomola我知道......我發佈後看到,我已更新。使用子查詢查找最新日期,然後加入。 –

+0

啊,謝謝。我會嘗試。 –