#sql #sql-server #asp-classic
#sql #sql-сервер #asp-классический
Вопрос:
У меня есть довольно сложный запрос, который мне нужно расширить, но я не уверен, как это сделать.
На данный момент я использую следующий запрос для вывода нескольких значений.
SELECT CONVERT(CHAR(8), pay.PaidUntil, 10) as LastDay,
COUNT(*) As PaymentsDue,
SUM(sales.Amount) As TotalDue
FROM UserPaidUntil pay INNER JOIN Sales sales
ON pay.Sales_ID = sales.Sales_ID
WHERE pay.PaidUntil > getDate()
AND pay.PaidUntil < DateAdd(day, 10, getDate())
AND pay.Billing_ID = 2
GROUP BY CONVERT(CHAR(8), pay.PaidUntil, 10)
ORDER BY CONVERT(CHAR(8), pay.PaidUntil, 10)
На данный момент этот скрипт получает значения между 2 датами с интервалом в 10 дней, а затем группирует их по дате.
Теперь, что мне нужно сделать, это изменить sql так, чтобы каждый день был фактически с 10:01 утра в день A до 10:00 утра в день B
UserPaidUntil.PaidUntil — это поле, содержащее даты
Я не уверен, с чего начать, поэтому я подумал, что спрошу, может ли кто-нибудь мне помочь.
Ваше здоровье
Комментарии:
1. Вы имеете
UserPaidUntil.PaidUntil
в виду типы данных datetime?2. @Charlesliam столбец PaidUntil равен datetime да
Ответ №1:
У меня нет тестера для этого оператора.. Это будет что-то вроде этого :
SELECT CONVERT(CHAR(8), DateAdd(hour, 10, pay.PaidUntil), 10) as LastDay,
COUNT(*) As PaymentsDue,
SUM(sales.Amount) As TotalDue
FROM UserPaidUntil pay INNER JOIN Sales sales
ON pay.Sales_ID = sales.Sales_ID
WHERE DateAdd(hour, 10, pay.PaidUntil) > getDate()
AND DateAdd(hour, 10, pay.PaidUntil) < DateAdd(day, 10, getDate())
AND pay.Billing_ID = 2
GROUP BY CONVERT(CHAR(8), DateAdd(hour, 10, pay.PaidUntil), 10)
ORDER BY CONVERT(CHAR(8), DateAdd(hour, 10, pay.PaidUntil), 10)
Комментарии:
1. Закрыть, но без сигары. Цифры не совсем совпадают. Я вижу, что вы добавили 10 часов, чтобы довести цикл до 10:00 утра, но цикл начинается в 10:01 утра и заканчивается в 10:00 утра на следующий день. Вам нужно будет добавить 1 минуту к началу.