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
我正在使用以下查询来获取结果。查询的目的是获取每个客户的最新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