Я работаю над представлением и у меня есть следующая таблица, которую я пытаюсь изменить. (SQL Сервер)
Таблица X
ID Value End_time
1 10 2019-12-06T07:00:00+0000
2 15 2020-01-07T07:00:00+0000
2 20 2020-01-31T07:00:00+0000
3 25 2020-02-02T07:00:00+0000
3 30 2020-02-28T07:00:00+0000
4 35 2020-03-05T07:00:00+0000
4 40 2020-03-31T07:00:00+0000
[End_time] должно быть преобразовано из varchar в дату и дополнительный разделитель по месяцам и годам, затем я должен выбрать максимальное date и сгруппировать данные по году и месяцу.
Итак, я делаю следующий запрос:
SELECT [ID], [Value], CONVERT(date, LEFT([End_time], LEN([End_time]) - 14)) AS [date],
-- convert to date
MONTH(CONVERT(date, LEFT([End_time], LEN([End_time]) - 14))) AS Month_Name, --get month
YEAR(CONVERT(date, LEFT([End_time], LEN([End_time]) - 14))) AS Year_Name --get year
FROM X AS Table
INNER JOIN --join on itself
(SELECT MAX([date]) AS MaxDate, MONTH([date]) AS Month_Name, YEAR(date) AS Year_Name
FROM X
GROUP BY MONTH([date]), YEAR([date])) AS D ON D.MaxDate = CONVERT(date,
LEFT([End_time], LEN([End_time]) - 14))
Но я получаю сообщение об ошибке, что такого столбца, как date, нет. Я пробовал присоединиться вот так:
INNER JOIN --join on itself
(SELECT MAX(CONVERT(date, LEFT([End_time], LEN([End_time]) - 14))) AS MaxDate,
MONTH([date]) AS Month_Name, YEAR(date) AS Year_Name
FROM X
GROUP BY MONTH([date]), YEAR([date])) AS D ON D.MaxDate = CONVERT(date,
LEFT([End_time], LEN([End_time]) - 14))
Но потом я получаю сообщение об ошибке: Многокомпонентный идентификатор «X.End_time» не может быть привязан.
Итак, мой идеальный результат
ID Value Month_Name Year_Name
1 10 12 2019
2 35 01 2020
3 55 02 2020
4 75 03 2020