SQL запрос на выбор нескольких записей для одного продукта для одного идентификатора - PullRequest
0 голосов
/ 31 марта 2020

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

product |type_id| user | Date  |Desired ROW_NUMBER as output  |
-------+--------+------+-------+---------------------

 1      |   1  |   A   | 0101  |   1
 1      |   1  |   A   | 0102  |   1
 2      |   3  |   A   | 0105  |   2
 2      |   5  |   A   | 0105  |   2
 3      |   7  |   B   | 0101  |   1
 3      |   8  |   B   | 0104  |   1

Поэтому я хочу получить все записи с "1" в желаемом столбце row_num, но я не понял, как получить это, не сделав другую группу. Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вы можете использовать оконные функции:

select t.*
from (select t.*,
             rank() over (partition by user order by min_date) as seqnum
      from (select t.*,
                   min(date) over (partition by user, product) as min_date
            from t
           ) t
     ) t
where seqnum = 1;

Или только с одним подзапросом:

select t.*
from (select t.*,
             min(date) over (partition by user, product) as min_date_up,
             min(date) over (partition by user) as min_date_u
      from t
     ) t
where min_date_u = min_date_up;

Вы можете интерпретировать это как «вернуть все строки, где у продукта минимальная дата для пользователя ".

Здесь - это дб <> скрипка.

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

SELECT * FROM [tableName] WHERE Желаемый ROW_NUMBER = 1 ORDER BY Date [DES C, ASC]

Передать значение Desired ROW_NUMBER динамически в качестве параметра.

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