当前日期与上一周之间的SQL查询

8
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周)内的总和进行合并时遇到了问题。
在表中,包括: ju_start_timeju_end_time 请帮助我找到如何检查它是否在当前日期- 14天之间,并检查end_time日期是否仍在运行?
以下是输出我需要的答案:
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;

这两列的数据类型是什么?日期,时间,时间戳? - ypercubeᵀᴹ
3个回答

17

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所说,您需要在两个表上使用join条件。


啊,进展了,现在它显示输出了,但是什么也没有,我已经将整数“say 300”更改为我在数据库中拥有的信息范围内,但是除了表头之外,查询中没有任何输出,你有什么想法吗?如果可能的话,ju_start_time被设置为没有时区的时间戳,这可能是原因吗? - Zenaphor
我已经编辑了答案。你应该阅读我发布的链接,它包含有价值的信息,可以帮助你解决问题。 - bruno
应该是 BETWEEN LOCALTIMESTAMP - INTERVAL '14 天' AND LOCALTIMESTAMP 来显示任何结果。 - ypercubeᵀᴹ
谢谢你们的输入,现在已经成功显示了所需的结果,答案现在显示在我的原始问题下方。 - Zenaphor
可能会有所帮助,我假设我在下面尝试您的答案,但我不完全理解 sge.somecolumn 的连接部分。 - Zenaphor
显示剩余2条评论

5
我假设这两列的数据类型为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;

2

不清楚您是否需要对 ju_end_date 使用相同的条件,但结构应该是这样的:

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

当我尝试运行查询时,函数getdate()不存在的错误提示是什么?SELECT sge_job.j_owner as "Owner", sge_job_usage.ju_start_time,SUM(sge_job_usage.ju_cpu)as "CPU Total" FROM sge_job_usage, sge_job WHERE ju_start_time BETWEEN getdate() and DateAdd(d, -14, getdate()) GROUP BY j_owner; - Zenaphor
非常抱歉!我没有看到 postgre 标签:我的代码是针对 tsql/sqlserver 的!! - Alberto De Caro
这可能会有所帮助:PostgreSQL日期函数 - Alberto De Caro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接