МИНИМАЛЬНОЕ значение с использованием даты - PullRequest
0 голосов
/ 07 января 2020

Нужна минимальная запись даты из таблицы ниже, я пробовал таким образом, но не работает. любая помощь будет отличной

 CREATE TABLE #TEST ( ID INT , EN_ID INT ,RN_ID  INT , VALUE VARCHAR(5) , DATE DATETIME  ) 

INSERT INTO #TEST VALUES (1234,1756,605,'13.2', '2019-08-14 05:29:00.000') ,(1234,1756,605,'15.5',  '2019-07-17 10:14:00.000')

SELECT ID, EN_ID,RN_ID,
VALUE ,MIN (DATE) MINDATE
FROM #TEST 
GROUP BY ID, EN_ID,RN_ID,VALUE 

Ответы [ 3 ]

1 голос
/ 08 января 2020

Как предложил arce.est во втором примере кода, вы можете назначить номер строки, который позволит вам фильтровать данные так, как вы их описали:

declare @Samples as Table ( Id Int, En_Id Int, Rn_Id Int, [Value] VarChar(5), [Date] DateTime );

insert into @Samples ( Id, En_Id, Rn_Id, [Value], [Date] ) values
  ( 1234, 1756, 605,'13.2', '2019-08-14 05:29:00.000' ),
  ( 1234, 1756, 605,'15.5', '2019-07-17 10:14:00.000' );

select Id, En_Id, Rn_Id, [Value], [Date] -- , RN -- To see the values assigned.
  from (
    select Id, En_Id, Rn_Id, [Value], [Date],
      -- Generate a row number grouped by   Id, En_Id, Rn_Id   ordered by ascending   [Date] .
      Row_Number() over ( partition by Id, En_Id, Rn_Id order by [Date] ) as RN
      from @Samples ) as Placeholder
  where RN = 1; -- Output only the first row from each   Id, En_Id, Rn_Id   group.

Вы можете закомментировать where добавьте RN к внешнему списку select, чтобы увидеть, как присваиваются номера строк.

0 голосов
/ 08 января 2020
SELECT MIN(DATE) AS MINDATE
FROM #TEST 

Вот и все

0 голосов
/ 07 января 2020

Я могу подумать о том, чтобы сделать ТОП 1 или перечислить запрос, а затем отфильтровать

SELECT TOP 1 ID, EN_ID,RN_ID, VALUE ,MIN (DATE) MINDATE
FROM #TEST 
GROUP BY ID, EN_ID,RN_ID,VALUE 

SELECT *
FROM (  SELECT ID, EN_ID,RN_ID, VALUE, DATE, ROW_NUMBER() OVER(PARTITION BY ID, EN_ID,RN_ID ORDER BY DATE ASC) MINDATE
        FROM #TEST ) tbl
WHERE tbl.MINDATE = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...