Sqlite 如何在Trac中创建在特定日期关闭票据的报告
我希望创建一个报告,列出在某段时间内关闭的所有票据 伪代码如下Sqlite 如何在Trac中创建在特定日期关闭票据的报告,sqlite,trac,ticket-system,Sqlite,Trac,Ticket System,我希望创建一个报告,列出在某段时间内关闭的所有票据 伪代码如下 SELECT * FROM tickets WHERE closed AND date_closed = 'january 2009' 我无法解析的部分是date\u closed='2009年1月' 有没有办法在Trac中实现这一点 我对特定的SQL语法不感兴趣,我可以自己编写时间限制。我不确定的是Trac的db结构 SELECT * FROM ticket WHERE status='closed' AND date(c
SELECT * FROM tickets
WHERE closed AND date_closed = 'january 2009'
我无法解析的部分是date\u closed='2009年1月'
有没有办法在Trac中实现这一点
我对特定的SQL语法不感兴趣,我可以自己编写时间限制。我不确定的是Trac的db结构
SELECT * FROM ticket
WHERE status='closed'
AND date(changetime,'unixepoch')
BETWEEN date('YYYY-MM-DD') /* <- here goes your start date */
AND date('YYYY-MM-DD') /* <- here goes your end date */
其中,date('2009-01-01','start of month')
是由日期指定的月份的第一天,date('2009-01-01','start of month','+1 month','-1天')
是该月份的最后一天
SELECT DISTINCT ticket.* FROM ticket, ticket_change
WHERE ticket.id = ticket_change.ticket
AND ticket_change.field = 'status'
AND ticket_change.newvalue = 'closed'
AND strftime('%m', ticket_change.time, 'unixepoch') = '01';
如果你也知道年份,最好使用vartec建议的表达式,而不是strftime:
SELECT DISTINCT ticket.* FROM ticket, ticket_change
WHERE ticket.id = ticket_change.ticket
AND ticket_change.field = 'status'
AND ticket_change.newvalue = 'closed'
AND date(ticket_change.time,'unixepoch')
BETWEEN date('2009-01-01','start of month')
AND date('2009-01-01','start of month','+1 month','-1 day')
另外,关于表结构,您可以这样做:
CREATE TABLE ticket_change (
ticket INTEGER,
time INTEGER,
author TEXT,
field TEXT,
oldvalue TEXT,
newvalue TEXT,
UNIQUE ( ticket, time, field )
);
最后一个改变可能不是为了地位。卡普兰说得对。然而,在我的情况下,我对现在关闭的票感兴趣,所以“关闭”总是最后的更改。无论如何你俩都帮了我大忙。非常感谢。@JS:即使在这种情况下,您也可以在关闭时更改票证,从而更改票证的更改时间。看起来0.12版在时间字段中改为使用微秒。您需要使用
(ticket\u change.time/1000000)
使用unixepoch正确转换。
CREATE TABLE ticket_change (
ticket INTEGER,
time INTEGER,
author TEXT,
field TEXT,
oldvalue TEXT,
newvalue TEXT,
UNIQUE ( ticket, time, field )
);