2012-01-13 103 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

相關問題