Witam!
Mam dwi tabele orders
i users
. Musze zliczyc ile bylo zamowien w ostatnich 30 dniach, ktore byly zlozone przez uzytkownikow, ktorych ostanie zamowienie zalozyli w przecigu 120 dni.
Orders |
---|
user_id |
ordered |
Users |
---|
user_id |
Witam!
Mam dwi tabele orders
i users
. Musze zliczyc ile bylo zamowien w ostatnich 30 dniach, ktore byly zlozone przez uzytkownikow, ktorych ostanie zamowienie zalozyli w przecigu 120 dni.
Orders |
---|
user_id |
ordered |
Users |
---|
user_id |
Brakuje Ci w takim razie kolumny o dacie ostatniego logowania użytkownika czy cuś takiego ;)
select count(0),user_id from (select user_id,ordered from orders o where o.ordered>=now()-120) where ordered>=now()-30 group by user_id;
?
Ewentualnie bez group by jeśli chcesz globalnie, a nie per user.
SELECT * , (EXISTS(SELECT * FROM Orders Where Orders.user_id=o.user_id AND Orders.ordered<o.ordered and age(Orders.ordered, o.ordered)<interval '120 day')) from orders o where age(o.ordered)<interval '30 day'
No ale nie jest tak, że jeśli ktoś złożył zamówienie w ciągu ostatnich 30 dni, to NA PEWNO złożył zamówienie w ciągu ostatnich 120 dni? W sensie po co ten drugi warunek?
Marcin.Miga napisał(a):
SELECT * , (EXISTS(SELECT * FROM Orders Where Orders.user_id=o.user_id AND Orders.ordered<o.ordered and age(Orders.ordered, o.ordered)<interval '120 day')) from orders o where age(o.ordered)<interval '30 day'
AND Orders.ordered<o.ordered
? Czy nie lepiej było by uzyć co takigo tj np AND Orders.order_id != o.order_id
?age(Orders.ordered, o.ordered)<interval '120 day'))
Dobrze rozumiem, że ten warunek sprawdza 120 dni od ostatniego zamowienia nie od teraz?Dzięki, generalnie super przykład. @Marcin.Miga Pozdrawiam!
@poniatowski: Co do 1. to nie może być Twój warunek, bo wtedy nie obsługiwałby sytuacji dwóch zamówień z tego samego dnia... Co do 2., to tak - masz rację bierze 120 dni wstecz od daty zamówienia, a nie od bieżącej... Tak chyba miało być.