0

我正在使用以下查询来获取结果。查询的目的是获取每个客户的最新sales_amount,但是当给定日期范围内的销售额为两个或更多时,查询返回所有记录,我如何才能仅获取针对id的最新记录。相同的 id 应该只针对每个 id 包含一行。

SELECT id,
       Max(date),
       sales_amount
FROM   customer
WHERE  date BETWEEN '2020-08-01' AND '2020-08-15'
       AND id = 1001
GROUP  BY id,
          sales_amount; 
4

4 回答 4

0

您可以在子查询中使用行号为您提供排序,然后选择第一个。

SELECT *
FROM (
  SELECT id, date, sales_amount,
         ROW_NUMBER() OVER (ORDER BY date DESC) as RN
  FROM   customer
  WHERE  date BETWEEN '2020-08-01' AND '2020-08-15'
       AND id = 1001
) sub
WHERE RN = 1

请注意,如果您想为所有客户执行此操作,那么这就是查询

SELECT *
FROM (
  SELECT id, date, sales_amount,
         ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) as RN
  FROM   customer
  WHERE  date BETWEEN '2020-08-01' AND '2020-08-15'
) sub
WHERE RN = 1

这将为您提供每个客户的最新行。

于 2021-10-04T16:55:35.337 回答
0

您是否尝试过添加:

   SELECT id,
   Max(date),
   sales_amount
   FROM   customer
   WHERE  date BETWEEN '2020-08-01' AND '2020-08-15'
   AND id = 1001
   GROUP  BY id,
      sales_amount
   ORDER BY date DESC 
   LIMIT 1;
于 2021-10-04T16:50:49.447 回答
0

这是因为您已将 ID 包含在 group by 子句中,所有 ID 都将返回。

于 2021-10-04T16:36:23.097 回答
-1
select * from (

    SELECT  ROW_NUMBER() as Rn, 
       id,
       Max(date),
       sales_amount
FROM   customer
WHERE  date BETWEEN '2020-08-01' AND '2020-08-15'
       AND id = 1001
GROUP  BY id
order by max(date)
)
where Rn = 1
于 2021-10-04T20:04:49.450 回答