如何在表格中的任何2个日期之间减去?

时间:2014-04-21 06:30:02

标签: mysql sql select datediff

我有一张名为' Bill'这是餐馆系统数据库的表格。示例数据如下:

  Bill_Code,          Date,    Customer_ID, Order_Code, Total_Amount, Discount, Payable_Amount, Payment_Type, Staff_Name   
'B201404012000', '2014-03-21', 'S8909608D', 'O222224', '0.00', '0.00', '0.00', 'CASH', 'Dany Lim'   
'B201404012030', '2014-04-01', 'S8409608D', 'O222221', '100.00', '0.00', '100.00', 'VISA', 'Arya Stark'   
'B201404012032', '2014-04-01', 'S8609608D', 'O222222', '80.00', '0.10', '72.00', 'VISA', 'Arya Stark'   
'B201404012033', '2014-04-21', 'S8709608D', 'O222223', '0.00', '0.00', '0.00', 'NETS', 'Rob Targa'   
'B201404012039', '2014-04-01', 'S8709655D', 'O222225', '0.00', '0.00', '0.00', 'MASTERCARD', 'Dany Lim'   
'B201404012053', '2014-04-15', 'S8909608D', 'O222224', '0.00', '0.00', '0.00', 'CASH', 'Dany Lim'   
'B201404012115', '2014-04-11', 'S8909608D', 'O222226', '50.00', '0.00', '50.00', 'CASH', 'Rob Targa'   

我需要找到具有相同Customer_ID的两个日期的日期间隔为30天。

意思是,我需要查看是否有任何特定客户在访问期间有30天的时间。

感谢您的帮助。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果您需要了解返回客户的第一个订单和最后一个订单之间的日期超过30天,请尝试使用GROUP BY:

SELECT Customer_ID,
       MIN(Date) as MinDate,
       MAX(Date) as MaxDate
FROM BILL
GROUP BY Customer_ID 
HAVING DATEDIFF(MAX(Date),MIN(Date))>=30

答案 1 :(得分:0)

你试试这种方式:

要将时间字符串转换为秒数,请使用带有%s修饰符的strftime函数。 (假定没有日期部分的时间字符串的日期为2000-01-01,但在计算差异时会取消。)

要计算特定生产记录的暂停时间,请使用相关子查询;需要总聚合来处理零/一/多匹配暂停。

例如:

SELECT date,
       item,
       sum(strftime('%s', end) - strftime('%s', begin) -
           (SELECT total(strftime('%s', end) - strftime('%s', begin))
            FROM pause
            WHERE pause.date   = production.date
              AND pause.begin >= production.begin
              AND pause.end   <= production.end)
          ) AS seconds
FROM production
GROUP BY date,
         item