Я пытаюсь получить счетчик записей между определенным диапазоном дат, который определен для даты пользователя min и даты max в другой таблице.SQL HAVING BETWEEN диапазон дат
Это то, что у меня есть до сих пор, однако оно исключает, по крайней мере, 13 записей, о которых я знаю. Можете ли вы сказать, есть ли ошибка в моей логике?
Заранее благодарим за любой ввод, который у вас есть!
SELECT rtam.dbo.wfm_process_instance.user_id AS user_id,
MIN(rtam.dbo.wfm_process_instance.LOCAL_USER_START_TIME) AS Min_Date,
MAX(rtam.dbo.wfm_process_instance.LOCAL_USER_START_TIME) AS Max_Date,
0 AS IVR_Calls,
COUNT(*) AS Total_Calls
FROM rtam.dbo.WFM_PROCESS_INSTANCE
LEFT OUTER JOIN
rtam.dbo.WFM_PROCESS_type
ON rtam.dbo.wfm_process_instance.PROCESS_TYPE_INDX = rtam.dbo.wfm_process_type.INDX
WHERE rtam.dbo.wfm_process_type.DISPLAY_NAME = 'DTV Inbound2'
AND EXISTS (SELECT rtam.dbo.gnr_Tbl_72_type.CTRL_USER_ID,
CONVERT (VARCHAR (10), MIN(rtam.dbo.gnr_tbl_72_type.LOCAL_COL_113), 101) AS min_date,
CONVERT (VARCHAR (10), MAX(rtam.dbo.gnr_tbl_72_type.local_col_113), 101) AS max_date
FROM rtam.dbo.GNR_TBL_72_TYPE
WHERE rtam.dbo.GNR_TBL_72_TYPE.CTRL_USER_ID = rtam.dbo.wfm_process_instance.USER_ID
GROUP BY rtam.dbo.GNR_TBL_72_TYPE.CTRL_USER_ID
HAVING rtam.dbo.wfm_process_instance.LOCAL_USER_START_TIME BETWEEN CONVERT (VARCHAR (10), MIN(rtam.dbo.gnr_tbl_72_type.LOCAL_COL_113), 101) AND CONVERT (VARCHAR (10), MAX(rtam.dbo.gnr_tbl_72_type.LOCAL_COL_113), 101))
GROUP BY rtam.dbo.wfm_process_instance.USER_ID
ORDER BY rtam.dbo.wfm_process_instance.USER_ID;
Ну что именно вы ожидаете МЕЖДУ МЕЖДУ? Похоже, вы почему-то конвертируете в строку - это для устранения времени? Если да, я уверен, что 13 строк, которые отсутствуют, относятся к последнему дню? Пожалуйста, прочитайте [это] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx) и [это] (http : //sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx). –
То же, что и в качестве г-на Бертранда, может даже начать выяснять, что заставило вас выбрать даты в существующем подзапросе, не обращая на них никакого внимания. –
Вам нужно учитывать, что перенос столбца в функцию предотвратит возможность использования SQL-сервера использовать индексы и сделать ваш запрос медленнее. и точно так же, как @AaronBertrand сказал, уточните, что вы пытаетесь сделать здесь. –