Может ли MAX быть включен в регистр, который также имеет CONVERT (varchar
Я хочу, чтобы в моем представлении была выбрана самая последняя дата обновления "Ручная обработка", но я не могу найти, как включить функцию MAX в запрос
ALTER VIEW [dbo].[cb_TrainingFar] AS
SELECT
ISNULL(cs_facilities.guid, '00000000-0000-0000-0000-000000000000') AS [FacilityGuid],
'' as DART_ALL,
ISNULL(cs_facilities.name,'') as [Facility name],
ISNULL (ct_workers.forenames,'') + ',' + ISNULL (ct_workers.surname,'') AS 'Name of worker / volunteer',
ISNULL (ct_workers.startDate, 0) As 'Start Date',
CASE when ct_qualificationTypes.type =
'Manual Handling'
THEN CONVERT (varchar, ct_qualifications.renewalDate)
ELSE 'Not completed'
END 'Manual Handling',
3 ответа
Вот общая идея. Вы должны быть в состоянии проработать специфику:
select case when maxdate > getdate() then 'Fred' else 'Wilma' end Flinstone
from
(select id, max(datefield) maxdate
from sometable
group by id) temp
getdate () - это функция сервера sql. Вы не указали свою базу данных.
Основываясь на ваших входах
ALTER VIEW [dbo].[cb_TrainingFar] AS
SELECT
ISNULL(cs_facilities.guid, '00000000-0000-0000-0000-000000000000') AS [FacilityGuid],
'' as DART_ALL,
ISNULL(cs_facilities.name,'') as [Facility name],
ISNULL (ct_workers.forenames,'') + ',' + ISNULL (ct_workers.surname,'') AS 'Name of worker / volunteer',
ISNULL (ct_workers.startDate, 0) As 'Start Date',
CASE
ct_qualificationTypes.type
WHEN 'Manual Handling'
THEN CONVERT (varchar, MAX(ct_qualifications.renewalDate))
ELSE 'Not completed' END AS 'Manual Handling'
FROM ct_workers
...
GROUP BY ct_qualificationstype
Вот один подход с использованием оконной функции:
ALTER VIEW [dbo].[cb_TrainingFar] AS
SELECT
ISNULL(cs_facilities.guid, '00000000-0000-0000-0000-000000000000') AS [FacilityGuid],
'' as DART_ALL,
ISNULL(cs_facilities.name,'') as [Facility name],
ISNULL (ct_workers.forenames,'') + ',' + ISNULL (ct_workers.surname,'') AS 'Name of worker / volunteer',
ISNULL (ct_workers.startDate, 0) As 'Start Date',
CASE when ct_qualificationTypes.type =
'Manual Handling'
THEN CONVERT(varchar(255), max(ct_qualifications.renewalDate) over ())
ELSE 'Not completed'
END 'Manual Handling',
Однако я подозреваю, что ваша проблема требует лучшего понимания запроса. Как выглядит остальная часть запроса? Кстати, никогда не используйте varchar
без длины. Длина по умолчанию варьируется в зависимости от контекста, и довольно опасно зависеть от длины по умолчанию, являющейся достаточно длинной.