Как добавить диапазон дат для этого SQL в trac? - PullRequest
0 голосов
/ 04 сентября 2011

У нас следующий запрос работает, как и ожидалось, и в нашей модификации trac осталась одна последняя вещь:

SELECT
   p.value AS __color__,
   owner AS __group__,
   id AS ticket,
   severity,
   status,
   priority,
   summary,
   component, 
   milestone, 
   t.type AS type, 
   time AS created, 
   description AS _description, 
   reporter AS _reporter, 
   changetime AS modified, 
   time AS _time,
   reporter AS _reporter 
FROM 
   ticket t 
   LEFT JOIN enum p 
   ON p.name = t.priority 
      AND p.type = 'priority' 
WHERE 
   status = 'closed' 
ORDER BY 
   owner, 
   p.value, 
   t.type, 
   time

Нам нужно указать диапазон дат, чтобы вытащить только билеты, закрытые с 5 августа по август17. Мы должны иметь возможность редактировать запрос, чтобы изменить диапазон дат по мере необходимости, поскольку нам нужен несколько другой диапазон дат.Не могли бы вы посоветовать, как изменить запрос на диапазон дат с 5 по 17 августа?

Ответы [ 2 ]

2 голосов
/ 04 сентября 2011

Добавьте в конец предложения WHERE:

И changetime МЕЖДУ «2011-08-05» И «2011-08-17»

Я предполагаю, что 'changetime' - это поле, в котором хранится дата закрытия билета.

1 голос
/ 04 сентября 2011

Вы действительно хотите выбрать t.changetime в качестве ограничения?Любые изменения или комментарии после закрытия заявки могут испортить ваш отчет.В любом случае, давайте пока предположим, что вы можете как-то это исключить.

Как подсказал мой комментарий к ответу Остина, я не могу подтвердить и никогда не ожидал, что здесь будет работать строка даты.t.changetime содержит целочисленные значения (Trac 0,11) или значения INT / LONG (Trac 0,12), поэтому их необходимо сравнивать с такими значениями.

Вкратце я покажу вам, как их получить:

$> date -d '2011-08-06' +%s
1312581600
$> date -d '2011-08-18' +%s
1313618400

Как вы видите, преобразование из строки в POSIX секунд после 1970-01-01 довольно просто в любом окне терминала, в котором работает оболочка, такая как BASH.Для Trac 0.12 вам понадобится формат микросекунд, поэтому просто добавьте 6 нулей или используйте

echo $(($(date -d '2011-08-18' +%s) * 1000000))
1313618400000000

Обратите внимание, чтобы включить полный 2011-08-17, вы захотите пройти его до началана следующий день, следовательно, «2011-08-18» может быть тем, что вы хотите преобразовать.

Теперь сложите все вместе, и вы получите

AND t.changetime BETWEEN 1312581600 AND 1313618400

или для Trac> = 0,12

AND t.changetime BETWEEN 1312581600000000 AND 1313618400000000
...