我正在jupyter notebook中使用python创建一个提取postgresql数据的查询。以前我只提取2022年的数据,但现在在2023年,我被要求提取过去12个月的数据。
为了提取2022年的数据,我使用了下面的代码,它的工作原理就像一个魅力。
cur = conn.cursor()
cur.execute('SELECT version()')
postgreSQL_select_Query =
'SELECT car_id, "event", "position"
FROM cars.car_daily_data
WHERE event like {}
cur.execute(postgreSQL_select_Query.format("'%2022%'"))
mobile_records = cur.fetchall()
然而,为了得到过去12个月的数据,我尝试了下面的代码,没有错误,但没有数据被检索。基本上返回一个空的 Dataframe 。
cur = conn.cursor()
cur.execute('SELECT version()')
postgreSQL_select_Query =
'SELECT car_id, "event", "position"
FROM cars.car_daily_data
WHERE case when POSITION({} IN event)>0 then to_timestamp(event, {}) else null end BETWEEN to_timestamp({},{}) AND to_timestamp({},{})
cur.execute(postgreSQL_select_Query.format("'-'",
"'YYYY-MM-DDXHH24:MI:SSX'",
"'2022-02-01 00:00'",
"'YYYY-MM-DD HH24:MI'",
"'2023-02-01 00:00'",
"'YYYY-MM-DD HH24:MI'"))
mobile_records = cur.fetchall()
我不知道我还能做什么,因为我真的不太使用postgresql。干杯。
我试过使用不同的代码和运算符,如〉,但它导致了错误。
2条答案
按热度按时间t2a7ltrp1#
此代码首先计算当前日期12个月前的日期,然后将其与当前日期沿着用作查询中的参数。这些参数作为元组传递给execute(),并在查询中指定正确的日期格式字符串。使用to_timestamp()函数将“event”字符串转换为时间戳。
atmip9wb2#
如果你想要去年的daza,你不需要传递任何值给mix,但是如果你需要它,使用% s作为占位符的预准备语句
| ?列?|
| - ------|
| 2022年2月1日00时00分|
| 汽车标识|事件|位置|
| - ------|- ------|- ------|
| (2022年4月1日,A)|2022年4月1日|A类|
fiddle