最小时间和最小ID的SQL语句?
我是SQL新手,遇到了如下问题: 假设此人在各自的时间使用各自的ID付款 我想知道最早付款的金额。如果最早日期有多个条目,我会选择付款ID最小的条目 在这幅图中,答案很简单,但如果最早的付款是在4月5日完成的呢最小时间和最小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
在删除标题的空格之后,在搜索高、低的答案之后,我写了这个:
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进行分区。第二个问题是另一个问题-特别是因为您需要新的/不同的答案,请发布每个表以及您尝试过的内容。张贴所有的细节表格以及你在新问题中尝试过的内容