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

最小时间和最小ID的SQL语句?,sql,sql-server,ssms,Sql,Sql Server,Ssms,我是SQL新手,遇到了如下问题: 假设此人在各自的时间使用各自的ID付款 我想知道最早付款的金额。如果最早日期有多个条目,我会选择付款ID最小的条目 在这幅图中,答案很简单,但如果最早的付款是在4月5日完成的呢 在删除标题的空格之后,在搜索高、低的答案之后,我写了这个: SELECT PaymentID, PaymentAmt FROM ( SELECT MIN(s.PaymentID), s.PaymentDate, s.Pa

我是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等。如果我想找出每个人的最早支付金额,有什么好的解决方案

对于多个用户,可能是这样的-

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

对于多个用户,可能类似这样的情况-

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
只需按PaymentDate、PaymentID和order使用行号即可

只需按PaymentDate、PaymentID和order使用行号即可


为什么要把它复杂化

SELECT TOP 1 PaymentID, PaymentAmt
FROM sheetName
ORDER BY s.PaymentDate ASC, s.PaymentID ASC

为什么要把它复杂化

SELECT TOP 1 PaymentID, PaymentAmt
FROM sheetName
ORDER BY s.PaymentDate ASC, s.PaymentID ASC

注意:所提供的数据不能用于加入一个人,但对于您提供的数据,如果您只需要一个日期,请添加WHERE子句。谢谢标记!还有一个问题:如果我真的在和多个人打交道呢?假设我添加了另一列用户ID,我想找出每个人最早的付款金额。在这种情况下,选择Top1似乎不再有效。您有没有考虑到这一点的解决方案?这是问题的延伸,如果你能在这个问题上提供帮助,我会很高兴的@Markschultheis顺便说一句,非常感谢,我不知道您可以按多个列进行订购。re:另一列/表-这是关于加入的另一个问题-请发布另一个问题,因为这个问题现在有多个答案。然后,请给出每个表的布局列以及您尝试过的内容。注意:提供的数据无法与人连接,但对于您提供的数据,这应该有效。如果您只需要一个日期,请添加WHERE子句。谢谢标记!还有一个问题:如果我真的在和多个人打交道呢?假设我添加了另一列用户ID,我想找出每个人最早的付款金额。在这种情况下,选择Top1似乎不再有效。您有没有考虑到这一点的解决方案?这是问题的延伸,如果你能在这个问题上提供帮助,我会很高兴的@Markschultheis顺便说一句,非常感谢,我不知道您可以按多个列进行订购。re:另一列/表-这是关于加入的另一个问题-请发布另一个问题,因为这个问题现在有多个答案。然后,请给出每个表的布局列以及您尝试过的内容。如果您需要按userID之类的内容进行分区,请使用Squirrel的答案,但在“行数”窗口函数中添加按userID进行分区。第二个问题是另一个问题-特别是因为您需要新的/不同的答案,请发布每个表以及您尝试过的内容。发布所有详细信息表以及您在新问题中尝试过的内容如果您需要按userID之类的内容进行分区,请使用Squirrel的答案,但在“行数”窗口函数中添加按userID进行分区。第二个问题是另一个问题-特别是因为您需要新的/不同的答案,请发布每个表以及您尝试过的内容。张贴所有的细节表格以及你在新问题中尝试过的内容