Jak zliczyc ilosc zamowien?

0

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
0

Brakuje Ci w takim razie kolumny o dacie ostatniego logowania użytkownika czy cuś takiego ;)

1
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.

2
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'
0

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?

0
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'
  1. Możesz wytłumaczyć ten warunek: AND Orders.ordered<o.ordered? Czy nie lepiej było by uzyć co takigo tj np AND Orders.order_id != o.order_id?
  2. 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!

1

@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ć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1