最短时间和最小ID的SQL语句?

时间:2018-11-22 23:42:45

标签: sql sql-server ssms

我真的是SQL新手,遇到了如下所示的问题:

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

想象一下,此人已在各个时间使用各自的ID付款。

我想找出最早的付款额。如果最早有多个条目,那么我想选择付款ID最小的条目。

在此图中,答案很简单,但是如果最早的付款是在4月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;

它仍然不起作用。

有人可以帮我吗?

编辑:正如我对马克的答复所写,如果我正在找一群人呢?因此,可能会有另一个带有不同的“用户ID”的人以及他们的付款ID集合等。如果我想找出每个人的最早付款金额,什么是一个好的解决方案?

3 个答案:

答案 0 :(得分:4)

为什么要使其复杂?

select *
from
(
    select *, rn = row_number() over (order by PaymentDate, PaymentID)
    from   sheetName
) d
where d.rn = 1

答案 1 :(得分:0)

对于多个用户,也许像这样-

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

答案 2 :(得分:0)

只需将String hex = Bytes.from(subject).hashSha1().encodeHex(); row_number()一起使用

order by PaymentDate, PaymentID