PostgreSQL获得从现在开始24小时创建的结果

时间:2014-05-21 22:58:56

标签: postgresql timestamp

我有两张桌子,我正在加入。我想根据它是否是在24小时之前创建的结果来过滤结果。这是我的表格。

table user_infos (
  id integer,
  date_created timestamp with timezone,
  name varchar(40)
);

table user_data (
  id integer,
  team_name varchar(40)
);

这是我用来将它们连接在一起并希望过滤它们的查询:

SELECT timestampdiff(HOUR, user_infos.date_created, now()) as hours_since,
       user_data.id, user_data.team_name,
       user_infos.name, user_infos.date_created
       FROM user_data
           JOIN user_infos      
               ON user_infos.id=user_data.id  
       WHERE timestampdiff(HOUR, user_infos.date_created, now()) < 24 
       ORDER BY name ASC, id ASC  
       LIMIT 50 OFFSET 0

我要做的是加入两个表,以便将id,team_name,name和date-created视为一个表。 然后我想过滤它,以便我只得到24小时前创建的结果。这就是我使用timestampdiff的原因。 然后我按名称和ID按升序排序。 然后将结果限制为50。

除了我不工作之外,一切都很好看。当我运行此查询时,它告诉我“小时”列不存在。

显然,这里有一些微妙的东西搞乱了一切。有没有人有任何建议?


或者,我试过这个,但它告诉我1处有语法错误;

SELECT
    user_data.id, user_data.team_name,
    user_infos.name, user_infos.date_created
    FROM user_data
        JOIN user_infos 
            ON user_infos.id=user_data.id  
    WHERE user_infos.date_created
          BETWEEN DATE( DATE_SUB( NOW() , INTERVAL 1 DAY ) ) AND 
           DATE ( NOW() ) 
    ORDER BY name ASC, id ASC 
    LIMIT 50 OFFSET 0

1 个答案:

答案 0 :(得分:1)

我认为您的问题与您的数据类型有关。您正在检查时间戳字段是否在转换日期字段(从日期中删除时间)之间。 NOW()DATE(NOW())不同。

所以你有两个选择。您可以删除DATE()投射,它应该可以使用,或者您可以将date_created转换为日期。

SELECT
    user_data.id, user_data.team_name,
    user_infos.name, user_infos.date_created
FROM user_data
    JOIN user_infos 
        ON user_infos.id=user_data.id  
WHERE user_infos.date_created
      BETWEEN DATE_SUB( NOW() , INTERVAL 1 DAY ) AND 
       NOW()  
ORDER BY name ASC, id ASC 
LIMIT 50 OFFSET 0