Autor Zpráva
AdiOverRide
Profil
Ahoj,
prosím vás lidi, lámu si hlavu nad jedním dotazem nad jednou tabulkou. Třeba mi pomůžete :)

Do DB si ukládám údaje o odeslaných emailech a zda byly otevřeny. Pro příklad je důležitý jen že tam je příjemce [recipient], datum otevření [readDate] a předmět [subject].
Potřeboval bych dostat z DB emaily, které posledních 5 emailů, které jim byly odeslány neotevřeli. (Tzn uživatel který má datum otevření roven NULL u posledních 5 emailů (order DESC)).

Můj dotaz vypadá takto:
SELECT el1.recipientemail,
(
SELECT Count(subquery.readdate)
FROM (
SELECT readdate
FROM emaillog AS el2
WHERE el2.recipientemail = el1.recipientemail
ORDER BY readDate DESC limit 5 ) subquery
) AS count
FROM emaillog AS el1
GROUP BY recipientemail
HAVING count = 0;

Ale prakticky co nevím je jak napojit subquery na ten hlavní query viz nefungující řádek "WHERE el2.recipientemail = el1.recipientemail".

Nevíte někdo jak na to?

Díky,
A.
Kajman
Profil
Jakou verzi databáze máte?
AdiOverRide
Profil
MariaDB 10.1.48
Kajman
Profil
Možná něco takového (nevím, jakým sloupcem poznáte, který mail je novější, použil jsem sentdate).
SELECT el.recipientemail,
       Count(*) serie
FROM   emaillog el
       LEFT JOIN (SELECT recipientemail,
                         Max(sentdate) posledni
                  FROM   emaillog
                  WHERE  readdate IS NOT NULL
                  GROUP  BY recipientemail) otevrene
              ON el.recipientemail = otevrene.recipientemail
WHERE  el.sentdate > otevrene.posledni
        OR otevrene.posledni IS NULL
GROUP  BY el.recipientemail
HAVING Count(*) >= 5
AdiOverRide
Profil
Super, Díky moc vypadá to funkčně, mrknu na to jak to funguje. I když ne úplně mojích představ ale myslím že to zvládnu upravit. Uživatel který třeba neotevřel všechny email vyjímkou posledního tak je započítán do "neotevřených".
Kajman
Profil
AdiOverRide:
Uživatel který třeba neotevřel všechny email vyjímkou posledního tak je započítán do "neotevřených".

Nachystejte ukázku chybujících dat na sqlfiddle.com. Sice jsem dotaz nezkoušel, tak tam může být bota, ale pokud otevře poslední email, tak bude datum v otevrene.posledni přeci velké a nemůže pak projít podmínka ve where, která to omezuje.
AdiOverRide
Profil
Díky - hodil jsem to tedy zde: sqlfiddle.com/#!9/914ca40/2

Prakticky podmínce "má posledních 5 odeslaných emailů neotevřených". Zapomněl jsme v původní zprávě uvést status o odeslání. Na té URL jsem to upravil, testuji zda to funguje jak si představuji :)
Kajman
Profil
AdiOverRide:
Uživatel který třeba neotevřel všechny email vyjímkou posledního tak je započítán do "neotevřených".

Email example@ (jediný poslední je čtený) to přeci nenajde ani s novou podmínkou ani bez ní. Nevidím tam chybu.
AdiOverRide
Profil
Jo, máte pravdu, chyba byla u mě. :) díky,

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0