2010-07-28 38 views
0

我试图写一些SQL,从使用工会的几个表,其中的行日期小于一个小时拉。SQL选择满为止这类问题

但是,如果从SQL查询总行不加在一起大约是20,那么它应该改变哪里的日期是不到两个小时和检索等等,直到20行。

这是可能在SQL纯粹吗?我也有一种使用PHP来实现它的方式,但宁愿将它全部在SQL中完成。

回答

0

时按日期倒序排列,你应该选择第一个20 ..

所以没必要计算范围..

Sql Server的

SELECT TOP 20 .. 

其他的DB

SELECT ... LIMIT 0, 20 
+0

是的但我想要的是,如果选择的数量少于二十,扩大搜索范围,从最近一小时创建的行到最近两个小时创建的行,等等,直到已选择二十行 – wiggles 2010-07-28 10:29:01

+2

@wiggles :重点是,您选择的比您需要的多,按日期降序排序,然后使用“TOP”或“LIMIT”进行限制。这只给你20条最近的条目。 – cHao 2010-07-28 10:36:19

+0

阅读完后,解决了我的问题。谢谢。 – wiggles 2010-07-28 10:38:42

0

这可能不会对所有数据库服务器的工作,但你应该能够做到像

SELECT TOP 20 * 
FROM (SELECT your columns from table1 UNION SELECT your columns from table2) temp 
ORDER BY [the date column] DESC 

从子查询选择会减慢速度了一下,不过,你必须避免在子查询的WHERE子句(或者至少,他们设置远远不够回来,他们会始终返回至少20行),以使事情发挥作用。

有可能是一些非常相似,以至于会使用MySQL,因为它没有做TOP xxx。您应该能够说LIMIT 20末代替,但我不知道的MySQL是否会让你从这样的子查询中进行选择。我记得过去曾经遇到过问题,但坦率地说,MySQL是一款玩具直到v5.0。