Autor | Zpráva | ||
---|---|---|---|
AdiOverRide Profil |
#1 · Zasláno: 17. 12. 2021, 09:10:48
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 |
#2 · Zasláno: 17. 12. 2021, 09:42:37
Jakou verzi databáze máte?
|
||
AdiOverRide Profil |
#3 · Zasláno: 17. 12. 2021, 09:43:55
MariaDB 10.1.48
|
||
Kajman Profil |
#4 · Zasláno: 17. 12. 2021, 09:57:51
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 |
#6 · Zasláno: 17. 12. 2021, 10:14:20
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 |
#7 · Zasláno: 17. 12. 2021, 10:47:04
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 |
#8 · Zasláno: 17. 12. 2021, 12:09:49
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 |
#9 · Zasláno: 18. 12. 2021, 12:17:13
Jo, máte pravdu, chyba byla u mě. :) díky,
|
||
Časová prodleva: 2 roky
|
0