CASE ELSE Минимальная дата - PullRequest
       10

CASE ELSE Минимальная дата

0 голосов
/ 16 марта 2020

У меня есть данные о доставке с несколькими записями для каждого номера отслеживания и даты, и я хочу создать временную таблицу, которая идентифицирует правильную первую дату. Большую часть времени номер отслеживания имеет описание порядка «происхождения», которое я хочу использовать, но бывают случаи, когда его нет, и поэтому я хочу получить только первую дату, которая у меня есть.

Тем не менее, этот код ниже выбивает минимальную дату для каждого event_status_description, что не то, что я хочу. Цель - одна запись OrderTrack и event_date_time на номер отслеживания. Так что если event_status_description like '%origin%', тогда верните дату, в противном случае возьмите минимальную дату для всего этого OrderTrack.

SELECT Distinct (RTRIM(trackingnumber) + LTRIM(CAST(intmontyorderid AS varchar))) AS OrderTrack,
    CASE 
        WHEN event_status_description like '%origin$' THEN event_date_time
        ELSE MIN(event_date_time)
    END AS OriginDate
INTO #OriginTable
FROM abookprod.dbo.tblUPStrackinghistory
GROUP BY trackingnumber, intmontyorderid, event_date_time, event_status_description

1 Ответ

0 голосов
/ 17 марта 2020

Один из способов сделать это - найти минимум всех значений event_date_time, когда event_status_description равен like '%origin%', а COALESCE - минимум всех значений event_date_time для каждого OrderTrack:

SELECT Distinct (RTRIM(trackingnumber) + LTRIM(CAST(intmontyorderid AS varchar))) AS OrderTrack,
    COALESCE(MIN(CASE WHEN event_status_description like '%origin%' THEN event_date_time END), MIN(event_date_time)) AS OriginDate
INTO #OriginTable
FROM abookprod.dbo.tblUPStrackinghistory
GROUP BY trackingnumber, intmontyorderid

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...