如何在postgreSQL中获取最后24小时的数据

Pir*_*han 6 postgresql

我想获得最后24小时的数据.我在postgreSQL中写了一个查询,如下所示.但我无法按照我的预期得到答案.

 SELECT startdate::timestamp AS startdate,
    (DATE_PART('hour',startdate::timestamp)::integer) as hrs,count(guorderid)
    FROM ord_entitlement
    WHERE DATE_PART('Day',CURRENT_DATE::timestamp - startdate::timestamp) < 1
    AND DATE_PART('hour',startdate::timestamp) <= 24
    GROUP BY  hrs,startdate
    ORDER BY startdate
Run Code Online (Sandbox Code Playgroud)

Mar*_*oon 7

如果你使用CURRENT_DATE你将不会得到时间而是使用now()函数。尝试以下操作,

        SELECT startdate::timestamp AS startdate,
        (DATE_PART('hour',startdate::timestamp)::integer) as hrs,count(guorderid)
        FROM ord_entitlement
        WHERE DATE_PART('Day',now() - startdate::timestamptz) < 1
        GROUP BY  hrs,startdate
        ORDER BY startdate
Run Code Online (Sandbox Code Playgroud)

  • 像这样的 WHERE 条件不能使用索引,它的设计速度很慢。试试这个: WHERE startdate::timestamptz &gt; NOW() - INTERVAL '24 hour' (12认同)

Sch*_*ern 6

而不是检查日期部分,做时间数学来获得间隔.使用NOW()获取时间戳.

SELECT startdate::timestamp AS startdate,
      (DATE_PART('hour',startdate::timestamp)::integer) as hrs, 
      count(guorderid)
FROM ord_entitlement
WHERE NOW() > startdate::timestamptz
  AND NOW() - startdate::timestamptz <= interval '24 hours'
GROUP BY hrs,startdate
ORDER BY startdate
Run Code Online (Sandbox Code Playgroud)

无论您的时区或夏令时如何,这都可确保您获得最后24小时. NOW() > startdate::timestamptz确保您不会意外地从未来拿起东西.