Как вычесть между любыми двумя датами в таблице?
У меня есть таблица под названием "Билл", которая представляет собой таблицу базы данных для системы ресторанов. Пример данных ниже:
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 ответа
Если вам нужно знать, что клиенты возвращаются с датой между первым и последним заказом более 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
Вы попробуйте так:
Чтобы преобразовать строку времени в количество секунд, используйте функцию strftime с модификатором%s. (Предполагается, что строка времени без части даты будет иметь дату 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