代码之家  ›  专栏  ›  技术社区  ›  Josef Sábl

如何在Trac中创建在特定日期关闭票据的报告

  •  3
  • Josef Sábl  · 技术社区  · 16 年前

    我希望创建一个报告,列出在某段时间内关闭的所有票。

    伪代码应该是

    SELECT * FROM tickets
    WHERE closed AND date_closed = 'january 2009'
    

    我无法解决的部分是 date_closed = 'january 2009' .

    在TRAC中有办法做到这一点吗?

    我对特定的SQL语法不感兴趣,我可以自己编写时间限制。我不确定的是Trac的数据库结构。

    3 回复  |  直到 16 年前
        1
  •  2
  •   kmkaplan    16 年前
    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_s建议的表达式,而不是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')
    
        2
  •  3
  •   vartec    16 年前
    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 */
    

    如果您需要特定月份:

    SELECT * FROM ticket
    WHERE status='closed' 
      AND date(changetime,'unixepoch') 
          BETWEEN date('2009-01-01','start of month') 
              AND date('2009-01-01','start of month','+1 month','-1 day') 
    

    在哪里? date('2009-01-01','start of month') 是由日期给定的一个月的第一天,并且 date('2009-01-01','start of month','+1 month','-1 day') 是一个月的最后一天。

        3
  •  0
  •   dnk.nitro    13 年前

    另外,关于表结构,这里是:

    CREATE TABLE ticket_change ( 
        ticket   INTEGER,
        time     INTEGER,
        author   TEXT,
        field    TEXT,
        oldvalue TEXT,
        newvalue TEXT,
        UNIQUE ( ticket, time, field ) 
    );