【问题标题】:SQL query between current date and previous week当前日期与前一周之间的 SQL 查询
【发布时间】:2012-03-07 09:45:24
【问题描述】:
SELECT sge_job.j_owner AS "Owner"
      ,SUM(sge_job_usage.ju_cpu) AS "CPU Total"
FROM sge_job_usage, sge_job 
GROUP BY j_owner;

这是我当前的 sql 查询,它只是简单地读取 CPU% 和工作所有者,但如果它在当前日期(例如 14 天(2 周)前)之间,我无法仅合并上面的总和。

sge_job_usage 表中属于两者:

ju_start_time, ju_end_time

任何人都可以帮助我检查它是否在当前日期之间 - 14 天前,然后检查 end_time 日期以查看它是否仍在运行?

Answer that Outputs What I need below:

SELECT sge_job.j_owner AS "Owner"       
,SUM(sge_job_usage.ju_cpu) AS "CPU Total" 
FROM sge_job_usage, sge_job  
WHERE ju_start_time BETWEEN LOCALTIMESTAMP - INTERVAL '1 week' AND LOCALTIMESTAMP 
GROUP BY j_owner;

【问题讨论】:

  • 2 列的数据类型是什么?日期、时间、时间戳?

标签: sql postgresql


【解决方案1】:

ADC 语法对 PostgreSQL 无效。

我不明白您希望对 ju_end_date 应用哪个条件。不过应该和ju_start_time上的差不多吧。

SELECT sge_job.j_owner AS "Owner"
      ,SUM(sge_job_usage.ju_cpu) AS "CPU Total"
FROM sge_job_usage, sge_job 
WHERE sge_job_usage.C1 = sge_job.C2
  AND ju_start_time BETWEEN LOCALTIMESTAMP - INTERVAL '14 days' AND LOCALTIMESTAMP
GROUP BY j_owner;

我没有测试环境,所以我无法测试它,但我认为它应该可以工作。

有关主题检查的更多信息

http://www.postgresql.org/docs/9.1/static/functions-datetime.html

编辑:正如 ypercube 所说,您需要两个表的连接条件。

【讨论】:

  • 啊进度,它现在显示输出,但什么都没有,我已经在我的数据库中的信息范围内更改了 - integer 'say 300',但没有输出任何内容现在除了表格标题之外的查询,关于为什么会发生这种情况的任何想法?ju_start_time 设置为没有时区的时间戳,如果这可能是为什么?
  • 我已经编辑了答案。您应该阅读我发布的链接,它包含可以帮助您解决问题的宝贵信息。
  • 应该是BETWEEN LOCALTIMESTAMP - INTERVAL '14 days' AND LOCALTIMESTAMP 才能显示任何结果。
  • 感谢两位的输入,现在已经得到了想要的结果,答案现在显示在我原来的问题下面
  • @ypercube,目的是选择开始时间或结束时间,无论哪个真正让它从当前日期返回一定天数,看看它是否处于活动状态,只是改变天数并手动计算了那里的内容,这一切都与我所追求的有关
【解决方案2】:

我假设这两列是DATE 类型。然后你需要这样的东西:

WHERE ju_start_time BETWEEN CURRENT_DATE - INTERVAL '14 days'
                        AND CURRENT_DATE
  AND ju_end_time >= CURRENT_DATE

或者这个(取决于你想要检查的具体情况:

WHERE ( ju_start_time, ju_end_time ) 
      OVERLAPS 
      ( CURRENT_DATE - INTERVAL '14 days', CURRENT_DATE )

查询使用 2 个表,但没有加入条件。应该是:

SELECT sge_job.j_owner AS "Owner"
      ,SUM(sge_job_usage.ju_cpu) AS "CPU Total"
FROM sge_job_usage
  JOIN sge_job
    ON sge_job.SomeColumn = sge_job_usage.SomeColumn 
WHERE   ...
GROUP BY j_owner;

【讨论】:

    【解决方案3】:

    不清楚ju_end_date是否需要相同的条件,但结构应该是:

    ...
    WHERE ju_start_time BETWEEN getdate() and DateAdd(d,-14, getdate())
    

    【讨论】:

    • function getdate() 说当我现在尝试运行我的查询时不存在?选择 sge_job.j_owner 作为“所有者”,sge_job_usage.ju_start_time,SUM(sge_job_usage.ju_cpu) 作为“CPU 总数”从 sge_job_usage,sge_job WHERE ju_start_time BETWEEN getdate() 和 DateAdd(d, -14, getdate()) 按 j_owner 分组;
    • 我很抱歉!!我没有看到 postgre 标记:我的代码是用于 tsql/sqlserver 的!!
    • 这可能会有所帮助:PostgreSQL date functions
    猜你喜欢
    • 2014-11-22
    • 2011-11-11
    • 2012-03-05
    • 2018-04-08
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多