MsSQL / Классический ASP — оператор выбора от времени a до времени b

#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 минуту к началу.