从两个时间间隔获得结果

时间:2012-12-31 20:22:36

标签: mysql

有一个查询可以返回过去7天的销售数据。 如何获得过去30天的销售额(查看结果中过去7天和过去30天的销售额)?

SELECT 
  a.row_id,
  MAX(ad.new_value) - MIN(ad.new_value) AS sales7days 
FROM
  _audit a 
  LEFT JOIN _audit_data ad 
    ON a.audit_id = ad.audit_id 
WHERE ad.col = 'sales' 
  AND a.triggered_datetime > NOW() - INTERVAL 7 DAY 
GROUP BY a.row_id 
ORDER BY sales7days DESC;

2 个答案:

答案 0 :(得分:2)

也许使用CASE表达式:

SELECT a.row_id
   ,  MAX(case when a.triggered_datetime > NOW() - INTERVAL 7 DAY 
               then ad.new_value else NULL end)
    - MIN(case when a.triggered_datetime > NOW() - INTERVAL 7 DAY
               then ad.new_value else NULL end) AS sales7days 
   ,  MAX(case when a.triggered_datetime > NOW() - INTERVAL 30 DAY 
               then ad.new_value else NULL end)
    - MIN(case when a.triggered_datetime > NOW() - INTERVAL 30 DAY
               then ad.new_value else NULL end) AS sales30days 
FROM  _audit a, _audit_data ad 
WHERE a.audit_id = ad.audit_id AND ad.col = 'sales' 
GROUP BY a.row_id;

答案 1 :(得分:1)

SELECT 
  d7.row_id,
  d7.salesdays, d30.salesdays
FROM
(
  Select a.row_id, MAX(ad.new_value) - MIN(ad.new_value) AS salesdays
  From _audit a 
  LEFT JOIN _audit_data ad ON a.audit_id = ad.audit_id 
WHERE ad.col = 'sales' AND a.triggered_datetime > NOW() - INTERVAL 7 DAY 
GROUP BY a.row_id 
) d7,
(
  Select a.row_id, MAX(ad.new_value) - MIN(ad.new_value) AS salesdays
  From       _audit a 
  LEFT JOIN _audit_data ad ON a.audit_id = ad.audit_id 
WHERE ad.col = 'sales' AND a.triggered_datetime > NOW() - INTERVAL 30 DAY 
GROUP BY a.row_id 
) d30

where d7.row_id = d30.row_id
ORDER BY sales7days DESC;

假设您希望两者都具有相同的行ID,并且要显示任何一个值,您可能想要也可能不希望使其成为内部或外部联接和/或COALESCE值字段(对数据不够了解)。