2013-06-17 7 views
5

Mam tabeli „porządek” gdzie kolumny dość dużo wyglądać następująco:Mysql przypadek zapytań z zakresu, a sprawa z waluty

| order_id | shop_id | order_total | currency | created_at | 

Teraz chcę zrobić kwerendę, która zwraca tabela wygląda jak to:

| interval | currency | sum | 

Jeżeli przerwa jest przedział dat, waluta jest walutą i suma jest sumą wszystkich zamówień w tym przedziale, od tej walucie. Så przykładem mogą być:

| 2012-08-12-2012-09-12 | EUR | 540922 | 

| 2012-08-12-2012-09-12 | DKK | 43215 | 

| 2012-09-12-2012-10-12 | EUR | 123643 | 

| 2012-09-12-2012-10-12 | DKK | 0  | 

Mam już kwerendy diregards waluty, ale nie wiem jak zrobić to wziąć pod uwagę walutę .. jakieś pomysły?

Oto przykład zapytania, którego teraz używam. Prawdziwe zapytanie jest oczywiście generowane przez kod, to tylko przykład.

SELECT CASE 
     WHEN created_at BETWEEN '2012-08-12' AND '2012-09-12' THEN '2012-08-12-2012-09-12' 
     WHEN created_at BETWEEN '2012-09-12' AND '2012-10-12' THEN '2012-09-12-2012-10-12' 
     WHEN created_at BETWEEN '2012-10-12' AND '2012-10-14' THEN '2012-10-12-2012-10-14' 
     end AS intrvl, 
     Sum(order_total) 
FROM `order` o 
WHERE shop_id = 4 
     AND created_at BETWEEN '2012-08-12' AND '2012-11-17' 
GROUP BY CASE 
      WHEN created_at BETWEEN '2012-08-12' AND '2012-09-12' THEN '2012-08-12-2012-09-12' 
      WHEN created_at BETWEEN '2012-09-12' AND '2012-10-12' THEN '2012-09-12-2012-10-12' 
      WHEN created_at BETWEEN '2012-10-12' AND '2012-10-14' THEN '2012-10-12-2012-10-14' 
      end 

/Morten

Odpowiedz

10

dodać waluty na Twój Wybór i grupy przez klauzule

SELECT CASE 
     WHEN created_at BETWEEN '2012-08-12' AND '2012-09-12' THEN '2012-08-12-2012-09-12' 
     WHEN created_at BETWEEN '2012-09-12' AND '2012-10-12' THEN '2012-09-12-2012-10-12' 
     WHEN created_at BETWEEN '2012-10-12' AND '2012-10-14' THEN '2012-10-12-2012-10-14' 
     end AS intrvl, 
     currency, 
     Sum(order_total) 
FROM `order` o 
WHERE shop_id = 4 
     AND created_at BETWEEN '2012-08-12' AND '2012-11-17' 
GROUP BY CASE 
      WHEN created_at BETWEEN '2012-08-12' AND '2012-09-12' THEN '2012-08-12-2012-09-12' 
      WHEN created_at BETWEEN '2012-09-12' AND '2012-10-12' THEN '2012-09-12-2012-10-12' 
      WHEN created_at BETWEEN '2012-10-12' AND '2012-10-14' THEN '2012-10-12-2012-10-14' 
      end, 
      currency 
+0

Dobrze, że działa, ale teraz mam dwa wiersze z null jako przedział, gdyż zlicza wszystkie zlecenia na zewnątrz interwał i ustawia przedział jako null dla tych .. czy istnieje sposób na wykluczenie tych z zapytania? –

+0

tylko upewnij się, że klauzula where ma poprawny zakres created_at - od 2012-08-12 do 2012-11-17, ale zapytanie obejmuje tylko zakresy od 2012-08-12 do 2012-10-14 –

Powiązane problemy