如何根据计数定义范围查询?

时间:2012-09-20 17:23:18

标签: mysql

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

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

现在我希望获得具有以下特征的所有条目:从s - t和x - y获取所有条目,其中attribute =“a”并选择s和t,使得我在此范围内获得60个条目,选择t的方式是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)

日期= 06.02.2000的期望输出和范围s-t = 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),但我猜有更好的方法......我只是不知道这种方式; - )

1 个答案:

答案 0 :(得分:0)

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