#sql-server #database #tsql
#sql-сервер #База данных #tsql
Вопрос:
У меня есть два столбца со значениями даты.Я хотел бы отфильтровать их, чтобы увидеть результат только тогда, когда два столбца имеют одинаковые значения. У меня есть два вопроса в части «Где». Кто-нибудь может мне помочь с этим? 1) Как я могу сравнить значение между этими двумя столбцами со значениями даты? 2) Если у меня есть значение varchar вместо dates, как я могу сравнить два значения?
SELECT [USERNAME], count(*) AS [NumberOfHappening], min([date1]) AS [FirstDate], max([date2]) AS [SecondDate]
FROM TableMain
WHERE CAST([FirstDate] AS DATE) = CAST([SecondDate] AS DATE)
GROUP BY [USERNAME]
ORDER BY 'NumberOfHappening' DESC
Спасибо.
Комментарии:
1. Что вы подразумеваете под похожими значениями? Тот же год, тот же год и месяц, тот же год, месяц и день?
2. какова бы ни была ваша ситуация, если вы хотите использовать значение varchar в качестве даты, тогда лучше преобразовать значение varchar в datetime.
Ответ №1:
Правильно ли введены исходные значения даты или вы храните значения даты / времени в строковых столбцах? Если это так, вам действительно следует это изменить…
Если я правильно понял, вы хотите найти записи, где date1
и date2
находятся в один и тот же день. Приведение к DATETIME
to DATE
позволит избавиться от временной части.
Вы можете использовать CTE для прямого использования псевдонимов столбцов
;WITH cte AS
(
SELECT [USERNAME], count(*) AS [NumberOfHappening], min([date1]) AS [FirstDate], max([date2]) AS [SecondDate]
FROM TableMain
GROUP BY [USERNAME]
)
SELECT *
FROM cte
WHERE CAST([FirstDate] AS DATE) = CAST([SecondDate] AS DATE)
ORDER BY NumberOfHappening DESC;
Комментарии:
1. Большое спасибо. Второй запрос работает хорошо, но первый запрос не работает. Это показывает мне следующую ошибку: в предложении WHERE не может отображаться агрегат, если только он не находится в подзапросе, который находится в предложении HAVING или в списке выбора, а агрегированный столбец является внешней ссылкой.