查找表格中的下一条记录。在日期之后。 sql查询
请参阅我有一张表,它的字段,我写在下面。查询后应该是一个记录。那在哪个最短时间内。 dateend datestart的开始和结束。我有一个表:查找表格中的下一条记录。在日期之后。 sql查询
广播 行:ID,datestart,dateend,namecategory,页 表广播以下信息:
'1 ', '2012-01-09 13:00:00', '2012-01-09 15:00:00 ',' News', 'N1'
'2 ', '2012-01-09 16:00:00', '2012-01-09 17:00:00 ',' News', 'N1'
'3 ', '2012-01-09 11:00:00', '2012-01-09 12:00:00 ',' News', 'N2'
'4 ', '2012-01-09 16:00:00', '2012-01-09 18:00:00 ',' News', 'N2'
我能撤回“页”,其中记录之间的时间最小?
查询后应该显示:
N1
一般来说是可以实现这样的要求?虽然只有猜测这里没有min()是不行的。
SELECT
page
, MIN((SELECT next.datestart - a.dateend
FROM TableX AS next
WHERE next.page = a.page
AND next.datestart >= a.dateend
AND next.id <> a.id
ORDER BY next.datestart ASC
LIMIT 1
)
) AS gap
FROM
TableX AS a
GROUP BY
page
ORDER BY
gap ASC
LIMIT 1
有关显示所有空白,不计算最小的一个:
SELECT
page
, (SELECT next.datestart - a.dateend
FROM TableX AS next
WHERE next.page = a.page
AND next.datestart >= a.dateend
AND next.id <> a.id
ORDER BY next.datestart ASC
LIMIT 1
) AS gapToNextBroadcast
FROM
TableX AS a
WHERE --- optional for
page = @pageToCheck --- one page only
非常感谢您的决定。我如何补充说他只搜索含N1记录的区间? – Feor 2012-01-13 13:38:45
你可以添加一个'WHERE page ='N1' – 2012-01-13 13:45:55
SELECT
page
FROM
MyTable
ORDER BY
dateend - datestart
LIMIT 1
有点儿东西。该查询在一行中减去一条记录。并计算时间。但我需要计算记录之间的差距。 – Feor 2012-01-13 13:18:44
我不认为这是可以做只使用SQL ......或者它会太复杂。在某些脚本中预先计算间隔并存储在缓存或类似内容中可能更好?
但是,其他字段可能会添加什么? – Feor 2012-01-13 13:15:56
你的问题的内容是混乱的,而你的问题似乎受到明确的。请尝试澄清你想要的一点。 – wilx 2012-01-13 12:34:51
他/她需要确定程序在哪个页面上具有最小间隔。在提供的例子中,N1有1小时的间隔,N2有4小时的间隔。 – Timur 2012-01-13 13:09:05
'2012-01-09 15:00:00'minus'2012-01-09 16:00:00'1小时。这是根据这个计划应该工作查询。 – Feor 2012-01-13 13:12:32