我真的是SQL新手,遇到了如下所示的问题:
想象一下,此人已在各个时间使用各自的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集合等。如果我想找出每个人的最早付款金额,什么是一个好的解决方案?
答案 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