Найти вторую самую низкую дату покупки SQL - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть набор данных:

 CustomerID    date
 1             01/01/18
 1             02/01/18
 1             05/12/18
 2             03/03/18
 2             07/11/18
 2             05/12/18

Я хочу найти первую и вторую группу дат покупки покупателем:

  CustomerID    1st      2nd
  1             1/1/18   2/1/18
  2             3/3/18   7/11/18

Как я могу использовать sql для этого?Для первой покупки я просто использую:

 SELECT CustomerID, min(date) as 1st FROM table group by 1

, но я не знаю, как поступить со второй датой покупки

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Вот способ сделать это без подзапросов:

select CustomerID, min(date) as date_1,
       ( array_agg(date order by date) )[2] as date_2
from t
group by CustomerID;
0 голосов
/ 28 сентября 2018

Мы можем попытаться использовать ROW_NUMBER, за которым следует пивот:

WITH cte AS (
    SELECT CustomerID, date, ROW_NUMBER() OVER (PARTITION BY CustomerID ORDER BY date) rn
    FROM yourTable
)

SELECT
    CustomerID,
    MAX(CASE WHEN rn = 1 THEN date END) "first",
    MAX(CASE WHEN rn = 2 THEN date END) "second"
FROM cte
WHERE rn <= 2
GROUP BY
    CustomerID;

Демо

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