如何使用python每小时从sql表中捕获前一个小时的数据?

z4bn682m  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(486)

基本上我有一个名为customerid,purchasedatetime列的sql表。每小时我都会有一个模型,它必须基于python中的这三列运行,这三列应该会获取前一个小时的数据。
在python中,下面是我用来获取前一小时数据的select脚本,它将存储在pandas dataframe中,并用于模型。

def CustomerData():
    sql = "SELECT Name, CustomerID, PurchaseDateTime FROM XYZ table WHERE (PurchaseDateTime between '' and '')"
    DF = pd.read_sql(sql, engine)
    DF.columns = ['Name', 'CustomerID', 'PurchaseDate']
    return DF

每小时自动提取前1小时数据,无需硬记录任何值。例如,如果我的python模型脚本在下午4点运行,那么我需要一个select脚本,以便在下午3点到4点之间发生的所有事务都应该被拉取。同样,这种情况每小时都会发生。
如果由于x原因和脚本触发器导致延迟,则在下午4点02分而不是下午4点触发。然后我的脚本也应该从下午3点开始选取数据,而不是从下午3点02分。
提前谢谢。

ljsrvy3e

ljsrvy3e1#

SELECT Name, CustomerID, PurchaseDateTime FROM XYZ table
WHERE
(
    cast(getdate() as date)  = cast(PurchaseDateTime as date)
and DATEPART(HH,getdate()) =DATEPART(HH,PurchaseDateTime)+1
)
or 
    (
    DATEPART(HH,getdate()) = 1 and DATEPART(HH,PurchaseDateTime)=23
and cast(getdate() as date)  = cast(PurchaseDateTime as date)-1

    )

使用上面的sql代码可以得到最后一个小时的数据,忽略任何其他较小的分数

v09wglhw

v09wglhw2#

您可以尝试:

def CustomerData():
    sql = "SELECT Name, CustomerID, PurchaseDateTime FROM XYZ table WHERE (PurchaseDateTime between CAST(CONCAT(DATE_FORMAT(NOW(), '%Y-%m-%d %h'), ':00:00') AS DATETIME) and date_add(CAST(CONCAT(DATE_FORMAT(NOW(), '%Y-%m-%d %h'), ':00:00') AS DATETIME),interval -1 hour))"
    DF = pd.read_sql(sql, engine)
    DF.columns = ['Name', 'CustomerID', 'PurchaseDate']
    return DF

相关问题