pandas read_ sql. Как сделать запрос с предложением где поля даты - PullRequest
1 голос
/ 06 января 2020

У меня есть поле месяц-год в формате datetime64 [ns].

Как использовать это поле в предложении where для получения скользящих данных за 12 месяцев (данные за последние 12 месяцев).

Приведенный ниже запрос не работает, но я хотел бы что-то, что фильтрует данные за 12 месяцев.

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

К вашему сведению - это база данных oracle. Если бы я мог избежать жесткого кодирования значения 2019-01-01, это было бы здорово !!

Ответы [ 2 ]

1 голос
/ 06 января 2020

Вам необходимо использовать дату и время и установить формат даты, как показано ниже.

Просто получите относительную дату, и если вы используете формат даты и времени как ГГГГММДД, используйте 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)
0 голосов
/ 06 января 2020

Вы можете сделать это с чистым SQL.

Следующее выражение динамически вычисляет начало месяца 1 года a go:

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

Это фразы как: take дата в первый день текущего месяца и вывести из нее 12 месяцев.

Вы можете просто использовать ее как условие фильтрации:

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

Примечание: предполагается, что monthyear имеет тип данных date.

...