【问题标题】:Find the next record in the table. After a datetime. Sql query查找表中的下一条记录。在约会时间之后。 sql查询
【发布时间】:2012-01-13 21:41:49
【问题描述】:

看到我有一个表格,它的字段,我写在下面。查询后应该是一条记录。即在其中的最短时间。 dateend datestart 的开始和结束。我有一张桌子:

广播 行:id、datestart、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()是不行的。

【问题讨论】:

  • 您的问题内容令人困惑,而您的问题主题似乎很明确。请尽量澄清你想要什么。
  • 他/她需要确定哪些页面程序之间的间隔最小。在提供的示例中,N1 的间隔为 1 小时,N2 的间隔为 4 小时。
  • '2012-01-09 15:00:00' 减去 '2012-01-09 16:00:00' 1 小时。那就是按照这个方案应该可以查询。

标签: mysql sql database


【解决方案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

【讨论】:

  • 非常感谢您的决定。我该如何补充说他只寻找包含 N1 的记录的区间?
  • 您可以添加WHERE page = 'N1'
【解决方案2】:
SELECT 
  page
FROM 
  MyTable
ORDER BY 
  dateend - datestart
LIMIT 1

【讨论】:

  • 一点东西。此查询在一行中减去一条记录。并计算时间。但我需要计算记录之间的差距。
【解决方案3】:

我不认为仅使用 SQL 就可以做到这一点...否则会太复杂。在某些脚本中预先计算间隔并存储在缓存中或类似的东西可能会更好吗?

【讨论】:

  • 但是哪些额外的字段可以添加一些东西?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多