SQL 用于日期过滤的 WITH 语句
SQL WITH statements for date filtering
我有几年的价格数据,我需要从中提取特定日期的数据:一年前、一个季度前、一个月前、两周前。我使用 Apache Impala SQL
我尝试使用 WITH 语句创建过滤天数的子集。由于一年前的日期可能是周末或假期,我从 (-370.. -365 天前)
的范围内选择最大日期
WITH yearpast AS (
SELECT max(quote_date_time) as yearago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -370) and quote_date_time <= adddate(now(), -365)),
monthpast AS (
SELECT max(quote_date_time) as monthago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -33) and quote_date_time <= adddate(now(), -30)
)
SELECT close_px FROM quotes_raw
WHERE quote_date_time IN (yearpast.yeargo, monthpast.monthago)
我希望 SELECT 语句使用 yearpast 的 quote_date_time 作为过滤器,但我收到了一个错误。
你需要参考cte:
WITH yearpast AS (
SELECT max(quote_date_time)
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -370) and quote_date_time <= adddate(now(), -365)
)
SELECT close_px
FROM quotes_raw
WHERE quote_date_time IN (SELECT yearpast.quote_date_time FROM yearpast);
编辑:
WITH yearpast AS (
SELECT max(quote_date_time) as yearago
FROM quotes_raw
WHERE quote_date_time>=adddate(now(),-370) and quote_date_time <= adddate(now(), -365)),
monthpast AS (
SELECT max(quote_date_time) as monthago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -33) and quote_date_time <= adddate(now(), -30)
)
SELECT close_px
FROM quotes_raw
WHERE quote_date_time IN (SELECT yearpast.yeargo FROM yearpast
UNION ALL SELECT monthpast.monthago FROM monthpast)
仅使用 order by
和 limit
怎么样?
select qr.*from quotes_raw qr
where quote_date_time >= adddate(now(), -370)
order by quote_date_time
limit 1;
我有几年的价格数据,我需要从中提取特定日期的数据:一年前、一个季度前、一个月前、两周前。我使用 Apache Impala SQL
我尝试使用 WITH 语句创建过滤天数的子集。由于一年前的日期可能是周末或假期,我从 (-370.. -365 天前)
的范围内选择最大日期WITH yearpast AS (
SELECT max(quote_date_time) as yearago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -370) and quote_date_time <= adddate(now(), -365)),
monthpast AS (
SELECT max(quote_date_time) as monthago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -33) and quote_date_time <= adddate(now(), -30)
)
SELECT close_px FROM quotes_raw
WHERE quote_date_time IN (yearpast.yeargo, monthpast.monthago)
我希望 SELECT 语句使用 yearpast 的 quote_date_time 作为过滤器,但我收到了一个错误。
你需要参考cte:
WITH yearpast AS (
SELECT max(quote_date_time)
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -370) and quote_date_time <= adddate(now(), -365)
)
SELECT close_px
FROM quotes_raw
WHERE quote_date_time IN (SELECT yearpast.quote_date_time FROM yearpast);
编辑:
WITH yearpast AS (
SELECT max(quote_date_time) as yearago
FROM quotes_raw
WHERE quote_date_time>=adddate(now(),-370) and quote_date_time <= adddate(now(), -365)),
monthpast AS (
SELECT max(quote_date_time) as monthago
FROM quotes_raw
WHERE quote_date_time >= adddate(now(), -33) and quote_date_time <= adddate(now(), -30)
)
SELECT close_px
FROM quotes_raw
WHERE quote_date_time IN (SELECT yearpast.yeargo FROM yearpast
UNION ALL SELECT monthpast.monthago FROM monthpast)
仅使用 order by
和 limit
怎么样?
select qr.*from quotes_raw qr
where quote_date_time >= adddate(now(), -370)
order by quote_date_time
limit 1;