Может ли 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 без длины. Длина по умолчанию варьируется в зависимости от контекста, и довольно опасно зависеть от длины по умолчанию, являющейся достаточно длинной.

Другие вопросы по тегам