SQL-запрос между текущей датой и предыдущей неделей - PullRequest
4 голосов
/ 07 марта 2012
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;

Ответы [ 3 ]

12 голосов
/ 07 марта 2012

Синтаксис 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, вам необходимо условие соединения двух таблиц.

4 голосов
/ 07 марта 2012

Я предполагаю, что два столбца имеют тип 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 голосов
/ 07 марта 2012

Не ясно, нужно ли вам такое же условие для ju_end_date, но структура должна быть:

...
WHERE ju_start_time BETWEEN getdate() and DateAdd(d,-14, getdate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...