получить первую запись, где значение не является нулевым SQL Server 2012 - PullRequest
0 голосов
/ 12 октября 2018

У меня есть таблица с этими 3 столбцами:

value date id

Для каждого идентификатора я хотел бы определить первое значение, используя дату для заказа.Это правильный подход?:

    ;with cte as
    (
        select 
            id
            ,date
            ,value
            ,ROW_NUMBER() OVER (PARTITION BY id ORDER BY date asc) AS RN 
        from Bla
where value is not null
    )
    select 
        * 
    from cte
    where RN = 1

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Другой подход - использовать TOP 1 WITH TIES, упорядочивая записи следующим образом:

SELECT TOP 1 WITH TIES id, [date], [value]
FROM BLA
ORDER BY ROW_NUMBER() OVER(PARTITION BY ID ORDER BY 
    CASE WHEN [value] IS NULL THEN '2525-12-31' ELSE [date] END)
0 голосов
/ 13 октября 2018

Да, это правильный подход.Я бы сделал это так же, возможно, без звездочки и без точки с запятой в начале (поскольку я также не использую точку с запятой, чтобы начать предложение):

WITH 
  cte (id, [date], [value], RN) AS (
    SELECT id, [date], [value],
      ROW_NUMBER() OVER (PARTITION BY id ORDER BY [date])
    FROM Bla
    WHERE [value] IS NOT NULL
  )
SELECT id, [date], [value]
FROM cte
WHERE RN = 1;
...