1
SELECT id AS ticket, status, priority, reporter, owner, 
       time AS created, summary
  FROM ticket
  WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER
  ORDER BY time, priority

我试图让记者看到他们拥有的过期票,这些票目前正在开放,但对 trac 来说是新的。非常感谢使用当前日期的任何帮助。

4

2 回答 2

1

要完成任务,您需要

  • 设置自定义工单字段due_date或类似字段(在您的情况下可能已经完成)
  • 在 Trac db 表上使用 JOINticket_custom来获取该字段值
  • 检索当前日期(时间戳)
  • 转换到期日期和当前日期(可能两者)中的至少一个以进行比较

我将在这里跳过 1 + 2,因为 StackOverflow 上有现有的文档(即参见如何在 trac 报告中显示截止日期列?)和其他地方。

到达NOW():根据关于报告的权威 wiki 文档,Trac 报告只有一个动态分配的变量:$USER。因此,您需要使用 SQL 函数。我找不到可移植的解决方案,因此这些建议取决于您的数据库后端:

  • SQLite(Trac 默认):current_datedatetime('now','localtime')
  • PostgreSQL:current_timestampnow()

关于最后一个子任务:您可能(还)没有使用自 Trac 1.1.1 以来支持的真正自定义时间字段,因为它是一个开发快照版本,并且仍然接近前沿。我只是为了完整性而指出它,因为它可以为您省去使用字符串转换解决方法的麻烦,如下所述。

您现在可能使用的是一个字符串,可能使用DateFieldPlugin提供的改进的输入法。但是字符串值最初对于 SQL 语句内部的直接比较是无用的。您必须将所有字符串转换为日期值或整数才能使您的报告正常工作。请参阅如何在 Trac 中创建带有在特定日期关闭的工单的报告,因为它与时间戳转换有关。我建议使用本机 Trac 时间列格式(整数值),这取决于您的 Trac 版本:

  • Trac <= 0.11:POSIX 秒
  • Trac >= 0.12:POSIX微秒

date但是已发布的示例提倡在 SQL 语句中使用函数(对于 SQLite)。根据您的日期字符串格式,这将需要将字符串转换为适当的格式,即使用DateFieldPlugin 的示例报告中substr所示的格式。

将各个部分放在一起(以 SQLite 为例,假设MM/DD/YYYY为 due_date 字符串格式):

SELECT id AS ticket, status, priority, reporter, owner, 
       time AS created, summary, tc.value as date
  FROM ticket t
LEFT JOIN ticket_custom tc on t.id = tc.ticket and tc.name= 'due_date'
  WHERE status IN ('new', 'assigned', 'reopened') and reporter = $USER
       and date(substr(tc.value,7,4)||"-"||substr(tc.value,1,2)||"-"||substr(tc.value,4,2)) < current_date
  ORDER BY time, priority
于 2013-04-27T15:06:07.113 回答
0

自己想出来并忘记了这篇文章,但为了完整起见,我将发布我的查询。

SELECT p.value AS __color__, id AS ticket, status, owner, c1.value AS company,
       time AS created,  c.value AS target_date, summary, p.value as Priority
  FROM ticket t 
  LEFT JOIN enum p ON p.name = t.priority
  LEFT JOIN ticket_custom c ON t.id=c.ticket AND c.name='target_date'
  LEFT JOIN ticket_custom c1 ON t.id=c1.ticket AND c1.name='company'
  WHERE status IN ('new', 'assigned', 'reopened') and reporter= $USER and CURRENT_DATE > target_date
  ORDER BY target_date
于 2013-04-29T16:11:50.723 回答