|
|
豪情万千的刺猬 · stata计量之前数据清洗的必备步骤 - ...· 6 月前 · |
|
|
很拉风的香菜 · 教育部公布2015年度高校科学研究优秀成果奖 ...· 11 月前 · |
|
|
眼睛小的桔子 · 罗洗河自解五个关键词· 1 年前 · |
|
|
有情有义的山羊 · SPSS中的多层(等级)线性模型Multil ...· 1 年前 · |
|
|
火爆的电影票 · 北京地铁13号线拨入京张高铁清河站 ...· 1 年前 · |
我想编写一个sql查询,在其中我选择按
id
分组的所有行,其中列
date
是该
id
的最新日期,但仍然小于例如16-JL-2021。我想在不使用子查询(在oracle中)的情况下这样做,这可能吗?我试了下,但不起作用。
SELECT *, max(date)
WHERE date < '16-JUL-2021'
OVER(PARTITION BY id ORDER BY date DESC) as sth
FROM table
发布于 2022-02-11 09:54:07
您可以在没有子查询的情况下找到最大日期。
SELECT t.*,
max("DATE") OVER(PARTITION BY id ORDER BY "DATE" DESC) as max_date
FROM "TABLE" t
WHERE "DATE" < DATE '2021-07-16'
您需要一个子查询来筛选,以只显示具有最大日期的行:
SELECT *
FROM (
SELECT t.*,
max("DATE") OVER(PARTITION BY id ORDER BY "DATE" DESC) as max_date
FROM "TABLE" t
WHERE "DATE" < DATE '2021-07-16'
WHERE "DATE" = max_date;
但是,即使使用子查询,您仍然只使用此技术查询一次表。
注意:
DATE
和
TABLE
是保留词,不能用作未引号标识符;更好的做法是为这些标识符使用不同的名称。
您可以等效地使用
RANK
或
DENSE_RANK
解析函数而不是
MAX
;但是,
ROW_NUMBER
不会提供相同的输出,因为它只返回一行,并且不会返回所有绑定行。
SELECT *
FROM (
SELECT t.*,
RANK() OVER(PARTITION BY id ORDER BY "DATE" DESC) as rnk
FROM "TABLE" t
WHERE "DATE" < DATE '2021-07-16'
WHERE rnk = 1;
但是,您仍然需要一个子查询来过滤行。
如果不使用子查询,则可以使用:
SELECT id,
|
|
眼睛小的桔子 · 罗洗河自解五个关键词 1 年前 |