我正在尝试编写一些使用联合从几个表中提取的SQL,其中行上的日期不到一个小时。
但是如果SQL查询的总行数不超过20,那么它应该将日期的位置改为少于两个小时,依此类推,直到检索到20行为止。
这可以仅在SQL中完成吗?我有一种使用PHP实现它的方法,但是更喜欢在SQL中完成它。
答案 0 :(得分:0)
按日期排序时,您应该选择前20个。
所以不需要计算范围..
Sql Server
SELECT TOP 20 ..
其他数据库
SELECT ... LIMIT 0, 20
答案 1 :(得分: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。