0

我正在使用 Trac 开发一个系统,我想限制返回的“更改日志”条目的数量。问题在于,Trac 使用 a 从多个表中整理这些条目union,然后根据它们的时间戳将它们组合成单个“变更集”。我希望将结果限制为最新的,例如 3 个变更集,但这需要检索尽可能多的行,直到获得 3 个唯一时间戳。解决方案需要适用于 SQLite/Postgres。

Trac当前的SQL

当前 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
4

2 回答 2

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 核心代码更快、更干净。

于 2013-06-21T15:35:51.133 回答
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
于 2013-06-21T10:30:18.870 回答