从金额为最大值的表中选择日期和ID

时间:2019-01-17 05:49:07

标签: sql

我正在尝试从金额最大的支付表中获取“日期”和“访客ID”。我知道如何按每个日期查找最大值,但无法获取具有最大值的Date和VisitorID。

我尝试使用下面的附加代码,但我只得到一个具有最大值的值。我正在尝试获取每天的日期和访客ID,且金额最大。

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

4 个答案:

答案 0 :(得分:1)

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

    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
    )

答案 1 :(得分:0)

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

  with cte as 
   ( 
    SELECT *,row_number() over(partition by date order by amount desc)rn
   from payment t1
   ) select * from cte where cte.rn=1

答案 2 :(得分:0)

一个选项使用子查询:

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;

子查询查找每个日期的最大金额。然后,我们将其加入到您的原始表中,以有效过滤掉给定日期中 not 没有最大金额的任何记录。

如果您的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;

如果您还希望获得给定日期的所有记录并列最高金额,则用ROW_NUMBERRANK替换上面的DENSE_RANK

答案 3 :(得分:0)

您很亲密,需要outerquery的引用才能使其与subquery相关:

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