Select 每个 ID 必须 Return 只有一行

Select Must Return only one row against every id

我正在使用以下查询来获取结果。查询的目的是获取每个客户的最新sales_amount,但是当销售额在给定日期范围内有两个或两个以上时,查询returns所有记录,我怎么只能得到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; 

这是因为你在group by子句中包含了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
   ORDER BY date DESC 
   LIMIT 1;

您可以在子查询中使用行号来给您排序,然后只选择第一个。

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

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

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