Sql 从最大值为Amount的表中选择日期和ID

Sql 从最大值为Amount的表中选择日期和ID,sql,Sql,我正在尝试从具有最大值amount的付款表中获取日期和VisitorID。我知道如何找到每个日期的最大值,但我无法获取具有最大值amount的日期和VisitorID SELECT Date, visitorID FROM payment WHERE Amount = ( SELECT MAX(Amount) FROM payment ) 我试图使用下面的附加代码,但我只得到了一个具有最大值的值。我正试图获得日期和访客ID从每天的金额最大值 SELECT Date, visi

我正在尝试从具有最大值amount的付款表中获取日期和VisitorID。我知道如何找到每个日期的最大值,但我无法获取具有最大值amount的日期和VisitorID

SELECT Date, visitorID
FROM payment
WHERE Amount = 
(
    SELECT MAX(Amount)
    FROM payment
)
我试图使用下面的附加代码,但我只得到了一个具有最大值的值。我正试图获得日期和访客ID从每天的金额最大值

SELECT Date, visitorID
FROM payment
WHERE Amount = 
(
    SELECT MAX(Amount)
    FROM payment
)

看到您的评论后,您似乎需要
行号()


您可以尝试使用相关子查询

    SELECT Date, visitorID,amount
    FROM payment a
    WHERE exists
    (
        SELECT 1
        FROM payment b where a.date=b.date group by b.date having max(b.amount)=a.amount
    )

一个选项使用子查询:

SELECT p1.Date, p1.visitorID
FROM payment p1
INNER JOIN
(
    SELECT Date, MAX(Amount) AS max_amount
    FROM payment
    GROUP BY Date
) p2
    ON p1.Date = p2.Date AND p1.Amount = p2.max_amount;
子查询查找每个日期的最大金额。然后,我们将其加入到原始表中,以有效地过滤掉给定日期中没有最大金额的任何记录

如果您的SQL版本支持分析函数,那么我们可以使用它们:

SELECT Date, visitorID
FROM
(
    SELECT p.*, ROW_NUMBER() OVER (PARTITION BY Date ORDER BY Amount DESC) rn
    FROM payment p
) t
WHERE rn = 1;

如果您还想拥有给定日期的所有记录,且这些记录的金额最高,则将上面的
行数
替换为
密集秩
如果您已接近,则需要从
外部查询
引用,以使其关联
子查询

SELECT p.Date, p.visitorID
FROM payment p
WHERE p.Amount = (SELECT MAX(p1.Amount) FROM payment p1 WHERE p1.Date = p.Date);

我尝试过使用它,但它为每个日期提供了多个MemberID。我只需要一个具有最大值的。@RahulShroff您是否需要每个成员的日期最大值?@RahulShroff如果您能够准确地发布样本数据及其输出,那就太好了。我需要date和memberID以及每个日期的最大金额。这可以工作,但是你能帮我理解InternalJoin的用法吗。