2012-03-07 118 views
3
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周) )前。当前日期和前一周之间的SQL查询

sge_job_usage表属于两个:

ju_start_timeju_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; 
+0

什么是2列的数据类型日期,时间,时间戳 – 2012-03-07 11:03:31

回答

11

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正如所说,你需要在两个表的连接条件。

+0

啊进步,它显示了一个输出,但它没什么,我改变了在我的数据库中有什么信息的范围内,“ - integer”说的是300',但除了表格标题之外没有任何内容正在输出,对于为什么会发生这种情况的任何想法?ju_start_time被设置为没有时区的时间戳如果这可能是为什么? – Zenaphor 2012-03-07 10:34:46

+0

我编辑了答案。您应该阅读我发布的链接,其中包含有助于解决问题的宝贵信息。 – bruno 2012-03-07 10:53:42

+0

它应该在LOCALTIMESTAMP - INTERVAL14天和LOCALTIMESTAMP之间以显示任何结果。 – 2012-03-07 11:05:19

2

目前尚不清楚,如果你需要的ju_end_date相同条件下,但结构应该是:

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

函数GETDATE()说法并不当我尝试,现在运行我的查询exsist选择sge_job.j_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()和DateAdd(d,-14,getdate())GROUP BY j_owner; – Zenaphor 2012-03-07 10:07:32

+0

我的歉意!我没有看到postgre标签:我的代码是tsql/sqlserver! – 2012-03-07 10:16:53

+0

这可能有所帮助:[PostgreSQL日期函数](http://www.postgresql.org/docs/8.0/static/functions-datetime.html) – 2012-03-07 10:18:12

4

我假设这两列是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;