SQL-запрос для поиска ранга - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица с Child_ID, Test_ID и Test_Date

 Child_ID Test_ID     Test_Date
   1        1        2018-05-21
   1        2        2018-05-22  

Я хочу найти TestNumber, поэтому я использую Rank на лету

Select Child_ID, Test_ID ,Test_Date,RANK() OVER (PARTITION BY t.Child_id order by Test_Date asc,boe.Test_ID asc) AS [TEST_NUMB]
from [Test] T
where t.Child_ID in (1)

, что дает мне результат

Child_ID Test_ID     Test_Date    TEST_NUMB
1           1        2018-05-21       1
1           2        2018-05-22       2

Но проблема в том, что когда я выбираю только один идентификатор теста, Test_number каждый раз дает '1'

select * from Test where test_ID =1 

    Child_ID Test_ID     Test_Date    TEST_NUMB
    2560249     1        2018-05-21       1

select * from Test where test_ID =2 

    Child_ID Test_ID     Test_Date    TEST_NUMB
    2560249     1        2018-05-21       1

Могу ли я получить запрос для получения точного номера test_Date согласно Test_Date без вставкиво временную таблицу (у меня миллионы записей)

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Это же CTE от Тима

select * 
from ( Select Child_ID, Test_ID , Test_Date
            , RANK() OVER (PARTITION BY t.Child_id 
                           order by Test_Date asc, Test_ID asc) AS [TEST_NUMB]
        from [Test] T
       where Child_ID = 1 
     ) tt 
where Test_ID = 1
0 голосов
/ 29 мая 2018

Поместите ваш текущий запрос в CTE, а затем запросите следующее:

WITH cte AS (
    SELECT Child_ID, Test_ID ,Test_Date,
        RANK() OVER (PARTITION BY Child_id ORDER BY Test_Date, Test_ID) AS [TEST_NUMB]
    FROM [Test]
    WHERE Child_ID IN (1)
)

SELECT * FROM cte WHERE test_ID = 1;

Это должно сработать, потому что к моменту запроса с точным значением test_ID значения рангов уже будут материализованы (извините, я просто хотел использовать это слово).

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