我正在使用Trac开发一个系统,我想限制返回的“changelog”条目的数量。问题是Trac使用union
从多个表中整理这些条目,然后根据它们的时间戳将它们组合成单个“变更集”。我希望将结果限制在最新状态,例如3个更改集,但这需要根据需要检索尽可能多的行,直到我有3个唯一的时间戳。解决方案需要适用于SQLite / Postgres。
当前SQL结果
Time User Field oldvalue newvalue permanent
=======================================================================
1371806593507544 a owner b c 1
1371806593507544 a comment 2 lipsum 1
1371806593507544 a description foo bar 1
1371806593324529 b comment hello world 1
1371806593125677 c priority minor major 1
1371806592492812 d comment x y 1
预期的SQL结果(限于1个时间戳,例如。)
Time User Field oldvalue newvalue permanent
=======================================================================
1371806593507544 a owner b c 1
1371806593507544 a comment 2 lipsum 1
1371806593507544 a description foo bar 1
答案 0 :(得分:1)
正如您已经自己指出的那样,由于结果数量不确定,因此无法在SQL中解决此问题。而且我认为这甚至都不需要。
您可以使用稍加修改的trac/ticket/templates/ticket.html Genshi模板来获得您想要的内容。变化
<div id="changelog">
<py:for each="change in changes">
到
<div id="changelog">
<py:for each="change in changes[-3:]">
并将文件放入<env>/templates/
重启您的网络服务器。但是,每当您尝试升级Trac安装时,请注意ticket.html的更改。每次执行此操作时,您可能需要在相应版本的当前模板上重新应用此更改。但恕我直言,它仍然比修补Trac核心代码更快更干净。
答案 1 :(得分:0)
如果您只想要三条记录(如“数据限制1”结果集),则可以使用limit
:
select *
from t
order by time desc
limit 3
如果您想要三张最新时间戳的所有记录,可以使用连接:
select t.*
from t join
(select distinct time
from t
order by times desc
limit 3
) tt
on tt.time = t.time