Найдите следующую запись в таблице.После свидания.Sql запрос - PullRequest
1 голос
/ 13 января 2012

Смотрите, у меня есть таблица, ее поля, я написал ниже.После запроса должна быть одна запись.Та, в которой минимальный период времени.Начало и конец даты и даты.у меня есть таблицы:

строки трансляции: id, дата начала, dateend, namecategory, page Таблица, транслирующая следующую информацию:

'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 () не обойтись.

Ответы [ 3 ]

1 голос
/ 13 января 2012
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
1 голос
/ 13 января 2012
SELECT 
  page
FROM 
  MyTable
ORDER BY 
  dateend - datestart
LIMIT 1
0 голосов
/ 13 января 2012

Я не думаю, что это возможно сделать, используя только SQL ... Или это будет слишком сложно. Может быть, лучше пересчитать интервалы в каком-нибудь скрипте и сохранить в кеше или что-то подобное?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...