【问题标题】:pandas read_sql. How to query with where clause of date field熊猫 read_sql。如何查询日期字段的where子句
【发布时间】:2020-01-06 15:41:04
【问题描述】:

我有一个 datetime64[ns] 格式的字段月-年。

如何在 where 子句中使用此字段来获取滚动 12 个月的数据(过去 12 个月的数据)。

下面的查询不起作用,但我想要一些过滤数据 12 个月的东西。

select * from ABCD.DEFG_TABLE where monthyear > '2019-01-01'

仅供参考 - 这是一个 oracle 数据库。如果我可以避免硬编码值 2019-01-01 那就太好了!!

【问题讨论】:

  • 请标记您正在使用的数据库:mysql、sql-server、oracle...?

标签: python sql oracle date


【解决方案1】:

您需要使用日期时间并设置日期格式如下。

只需获取您的相对日期,如果您遵循日期时间格式为 YYYYMMDD,请使用日期时间中的 strftime,正则表达式字符串为 ("%Y%m%d")

import datetime
import pandas 
from dateutil.relativedelta import relativedelta


query = "SELECT * FROM ng_scott.Emp"

between_first = datetime.date.today()
between_second = between_first - relativedelta(years=1)


# GET THE DATASET
dataset = pd.read_sql(query , con=engine)

# PARSE THE DATASET
filtered_dataset = dataset[(dataset['DOJ'] > between_first ) & (dataset['DOJ'] > between_second )]

print(filtered_dataset)

【讨论】:

  • 苏甘斯,感谢您的回复。您的代码确实有效,但我希望过滤查询语句中的数据,而不是带上整个数据集然后过滤。
  • 很高兴为您提供帮助。你的标题显示了 pandas read_sql,所以我假设你想要一个与 pandas 相关的解决方案。您可以通过单独更改查询来实现此目的,如果您在创建动态查询语句时需要任何帮助,请告诉我。我可以给你另一个答案
【解决方案2】:

您可以使用纯 SQL 来做到这一点。

以下表达式动态计算 1 年前月份的开始:

add_months(trunc(sysdate, 'month'), -12)

这句话为:取当月第一天的日期,并从中提取12个月。

您可以将其用作过滤条件:

select * from ABCD.DEFG_TABLE where monthyear > add_months(trunc(sysdate, 'month'), -12)

注意:这假定 monthyear 的数据类型为 date

【讨论】:

  • 完美!!谢谢专线小巴。这就是我一直在寻找的。​​span>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
  • 2022-12-01
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 2018-09-30
相关资源
最近更新 更多