2013-06-17 25 views
5

Tôi có một bảng 'trật tự', nơi các cột khá nhiều giống như thế này:Mysql truy vấn với phạm vi, và trường hợp tệ

| order_id | shop_id | order_total | currency | created_at | 

Bây giờ tôi muốn thực hiện một truy vấn, mà trả về một bảng trông như này:

| interval | currency | sum | 

Khoảng thời gian là khoảng thời gian, tiền tệ là tiền tệ và tổng là tổng của tất cả các đơn đặt hàng trong khoảng thời gian đó, của đơn vị tiền tệ đó. Ví dụ về một ví dụ có thể là:

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

Tôi đã có truy vấn diregards tiền tệ, nhưng tôi không biết cách làm cho nó xem xét tiền tệ .. bất kỳ ý tưởng nào?

Đây là ví dụ về truy vấn tôi sử dụng ngay bây giờ. Truy vấn thực sự tất nhiên được tạo ra bởi mã, đây chỉ là một ví dụ.

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

Trả lời

10

thêm tiền vào lựa chọn và nhóm của bạn bằng khoản

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

Alright, mà làm việc, nhưng bây giờ tôi nhận được hai hàng với null như khoảng thời gian, bởi vì nó tính tất cả các đơn đặt hàng bên ngoài khoảng thời gian và đặt khoảng thời gian là null cho những người .. là có một cách để loại trừ những người từ truy vấn? –

+0

chỉ cần đảm bảo mệnh đề where của bạn có phạm vi created_at chính xác - nó có 2012-08-12 đến 2012-11-17 nhưng truy vấn chỉ xem xét phạm vi từ 2012-08-12 đến 2012-10-14 –