【问题标题】:order by Time using current time?使用当前时间按时间排序?
【发布时间】:2017-04-25 12:42:41
【问题描述】:

我不了解 DBA 。 我是一名 ios 开发人员,我有一个问题要问 DBA。

`SELECT StartDate,Subject
 FROM tbl_Calendar
 WHERE StartDate BETWEEN ` date('2017-04-25') AND ('2017-04-26') 

例如:1

如果当前时间是13:30:00

给我这个命令3,4,5,2,1

例如:2

如果当前时间是12:35:00

给我这个订单2,3,4,5,1

例如:3

如果当前时间是11:35:00

给我这个命令1,2,3,4,5

这是我的表 sql:

  CREATE TABLE `tbl_Calendar` (
    `StartDate` datetime,
    `Subject`   ntext
  );

任何帮助将不胜感激。

【问题讨论】:

  • 这个排序背后的原因是什么?绝对差?
  • 这是一个事件时间表,因此如果当前时间是 12:30,则表示 12:00 工作正在进行(打印第一个),下一个工作是 1:00(打印第二个)和下一个或下一个和最后一个工作结束
  • 如果您没有指定ORDER BY 子句,则排序实际上是未定义的(无论它看起来多么可重现)。如果您想要特定订单,请添加适当的ORDER BY
  • 只是为了澄清这是否用于事件时间表为什么您的示例 1 需要值 2 和 1。因为它已经过了那个时间。跨度>
  • @Joby 这是客户要求

标签: sql sqlite select-query


【解决方案1】:

您可以像这样在ORDER BY 中使用CASE

    SELECT 
        StartDate, Subject
    FROM   
        tbl_Calendar
    WHERE  
        StartDate BETWEEN DATE ('2017-04-25') AND ('2017-04-26')
    ORDER  BY 
        CASE WHEN ((StartDate < DATETIME('now', 'localtime')) AND (StartDate <> (SELECT StartDate FROM tbl_Calendar WHERE  StartDate < DATETIME ('now', 'localtime') ORDER  BY StartDate desc limit 1))) THEN DATETIME (StartDate, '+1 day') ELSE StartDate END;

CASE 里面的子选择会忽略正在运行的事件记录,只改变之前的记录。

【讨论】:

  • 我检查了这对我有好处,因为 .目前我为此编写循环并打印这个:D。当我的客户同意时,我同意你的回答。
  • @HarshilKotecha 没问题。很高兴为您提供帮助。
  • 当前时间戳给 13:31 请检查。如何设置时区
  • 我觉得这很好 StartDate
  • 如果您知道哪个问题标题好,请建议或编辑
【解决方案2】:

您可以按表达式排序,因此只需使用 CASE、日期时间函数将您的逻辑包装在简单的表达式中,一切顺利

【讨论】:

  • 请咨询
  • 是的,你在答案附近,但我不了解 SQL,所以无法理解你的理论是写的,但我不想查询。 (顺便谢谢你)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-21
  • 2018-08-10
  • 2011-02-24
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 2018-10-05
相关资源
最近更新 更多