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的新手。任何使用当前日期的帮助都非常感谢。
答案 0 :(得分:1)
完成你需要的任务
due_date
或类似字段(可能已在您的情况下完成)ticket_custom
上使用JOIN来获取字段值我会在这里跳过1 + 2,因为StackOverflow上有现有的文档(即参见How to show due date column in the trac reports?)和其他地方。
获取 NOW():根据authoritative wiki documentation报告,Trac报告只有一个动态分配的变量:$ USER。所以你需要使用SQL函数。我找不到便携式解决方案,因此这些建议取决于您的数据库后端:
current_date
或datetime('now','localtime')
current_timestamp
或now()
在最后一个子任务上:可能你还没有使用真正的自定义时间字段,因为它是Trac 1.1.1以来的支持,因为它是一个开发快照版本,并且仍然接近前沿。我只是指出它的完整性,因为它将为您节省使用字符串转换解决方法的麻烦,如下所述。
您现在可能使用的是一个字符串,可能是DateFieldPlugin提供的改进输入法。但是,在SQL语句中直接比较字符串值最初是无用的。您必须将所有字符串转换为日期值或整数才能使报表正常工作。请参阅How to create report with tickets closed at certain date in Trac,因为它与时间戳转换有关。我建议使用本机Trac时间列格式(整数值),这取决于您的Trac版本:
但是已发布的示例主张在SQL语句中使用date
函数(对于SQLite)。根据您的日期字符串格式,这需要将字符串转换为适当的格式,即使用sample report for 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
答案 1 :(得分: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