2012-01-13 51 views
1

请参阅我有一张表,它的字段,我写在下面。查询后应该是一个记录。那在哪个最短时间内。 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()是不行的。

+1

你的问题的内容是混乱的,而你的问题似乎受到明确的。请尝试澄清你想要的一点。 – wilx 2012-01-13 12:34:51

+1

他/她需要确定程序在哪个页面上具有最小间隔。在提供的例子中,N1有1小时的间隔,N2有4小时的间隔。 – Timur 2012-01-13 13:09:05

+0

'2012-01-09 15:00:00'minus'2012-01-09 16:00:00'1小时。这是根据这个计划应该工作查询。 – Feor 2012-01-13 13:12:32

回答

1
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 
+0

非常感谢您的决定。我如何补充说他只搜索含N1记录的区间? – Feor 2012-01-13 13:38:45

+0

你可以添加一个'WHERE page ='N1' – 2012-01-13 13:45:55

1
SELECT 
    page 
FROM 
    MyTable 
ORDER BY 
    dateend - datestart 
LIMIT 1 
+0

有点儿东西。该查询在一行中减去一条记录。并计算时间。但我需要计算记录之间的差距。 – Feor 2012-01-13 13:18:44

0

我不认为这是可以做只使用SQL ......或者它会太复杂。在某些脚本中预先计算间隔并存储在缓存或类似内容中可能更好?

+0

但是,其他字段可能会添加什么? – Feor 2012-01-13 13:15:56

相关问题