1

我表中的元组如下所示:(值、日期、属性)。现在我想查询数据库并获取一个范围,但不是取决于日期,而是取决于计数“...范围内的最后 x 个条目”。以下示例将阐明:我有一个时间栏,其中所有属性为“x”的条目按日期列排序,因此点 s 和 t 的日期小于点 0 中的日期和点 x 中的日期当然,y 比点 0 大。所有点都有属性=“a”。

      s        t  0  x        y
------|--------|--|--|--------|------> t

现在我想获取具有以下特征的所有条目:从 s - t 和 x - y 中获取所有条目,其中属性 =“a”并选择 s 和 t,以便我在此范围内获得 60 个条目,选择 t in 5 个条目分别位于 t 和 0 以及 x 和 y 之间的方式。

这是一个示例数据:

(xyz, 01.02.2000, a)
(xyz, 02.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 03.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 04.02.2000, a)
(xyz, 06.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 07.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 10.02.2000, a)
(xyz, 12.02.2000, a)

date = 06.02.2000 和范围 st = 3, t-0=1 的所需输出将是

s = (xyz, 01.02.2000, a)
(xyz, 02.02.2000, a)
t = (xyz, 03.02.2000, a)
(xyz, 04.02.2000, a) NOT because between t and 0 should be 1 free
0 = (xyz, 06.02.2000, a)

而在另一个方向上,时间条上的“正确”方向完全一样……

目前我使用两个按日期排序和限制(5、60)的查询,但我想有更好的方法......我只是不知道这种方式;-)

4

1 回答 1

0

我认为唯一实用的方法是在两个 LIMIT'ed 查询之间使用 UNION,一个按升序排序,另一个按降序排序。这也是因为不能保证在两个间隔中的任何一个间隔中都有所需的行数。

于 2012-09-20T18:15:33.837 回答