Оператор SQL для минимального времени и минимального идентификатора? - PullRequest
0 голосов
/ 23 ноября 2018

Я действительно новичок в SQL, и я столкнулся с проблемой, как показано ниже:

https://i.stack.imgur.com/AJkmv.png

Представьте, что этот человек совершал платежи в соответствующие сроки, ссоответствующие идентификаторы.

Я бы хотел узнать сумму самого раннего платежа.Если для самой ранней даты есть несколько записей, я бы хотел выбрать запись с наименьшим идентификатором платежа.

На этом изображении ответ прост, но что, если самый ранний платеж был произведен 5 апреля?

После удаления пробелов в заголовках и поиска ответов в верхнем и нижнем регистре я написал следующее:

SELECT PaymentID, PaymentAmt 
FROM 
( 
    SELECT 
        MIN(s.PaymentID), 
        s.PaymentDate, 
        s.PaymentAmt, 
        ROW_NUMBER() OVER(PARTITION BY s.PaymentID ORDER BY s.PaymentDate) rn 
    FROM sheetName s 
    GROUP BY s.userid, s.PaymentDate, s.PaymentAmt
) t 
WHERE rn = 1;

И все равно это не работает.

Может ли кто-нибудь помочь мне с этим?

РЕДАКТИРОВАТЬ: Как написано в моем ответе Марку, что, если я вместо этого смотрю на группу людей?Таким образом, мог бы быть другой человек с другим "userID" с их набором идентификаторов оплаты и т. Д. Если я хочу узнать самую раннюю сумму оплаты для каждого человека, что было бы хорошим решением?

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

просто используйте row_number() с order by PaymentDate, PaymentID

select *
from
(
    select *, rn = row_number() over (order by PaymentDate, PaymentID)
    from   sheetName
) d
where d.rn = 1
0 голосов
/ 23 ноября 2018

Зачем усложнять?

SELECT TOP 1 PaymentID, PaymentAmt
FROM sheetName
ORDER BY s.PaymentDate ASC, s.PaymentID ASC
0 голосов
/ 23 ноября 2018

Для нескольких пользователей возможно что-то вроде этого -

select s.userid, s.paymentid, s.paymentdate, s.paymentamt
from sheetname s inner join
(
    select t.userid, min(t.paymentid) as minid
    from sheetname t inner join 
    (
        select u.userid, min(u.paymentdate) as mindate
        from sheetname u
        group by u.userid
    ) v on t.userid = v.userid and t.paymentdate = v.mindate
    group by t.userid
) w on s.userid = w.userid and s.paymentid = w.minid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...