【问题标题】:Ordering query results by two dates按两个日期排序查询结果
【发布时间】:2018-09-18 22:34:35
【问题描述】:

我正在尝试使用两个日期订购一些数据,但无论出于何种原因,我都无法达到预期的结果。

考虑以下数据集:

       DOS          |     CreatedOn
2018-09-14 08:15:00 | 2018-09-14 13:17:09
2018-09-04 09:15:00 | 2018-09-14 13:40:42
2018-09-04 09:15:00 | 2018-09-18 12:59:01
2018-09-04 09:15:00 | 2018-09-18 13:02:11
2018-09-04 09:15:00 | 2018-09-18 13:21:10
2018-09-04 09:15:00 | 2018-09-18 01:47:07
2018-09-04 09:15:00 | 2018-09-18 13:52:47
2018-09-18 08:30:00 | 2018-09-18 14:22:26
2018-09-18 08:30:00 | 2018-09-18 14:23:07
2018-09-18 08:30:00 | 2018-09-18 14:23:53
2018-09-18 08:30:00 | 2018-09-18 14:24:09
2018-09-18 08:30:00 | 2018-09-18 14:25:17
2018-09-18 08:30:00 | 2018-09-18 14:26:34
2018-09-18 08:30:00 | 2018-09-18 14:30:35
2018-09-04 09:15:00 | 2018-09-18 14:34:45
2018-09-18 09:15:00 | 2018-09-18 14:43:13

我正在尝试对数据集进行排序,使其按以下顺序排列:

       DOS          |     CreatedOn
2018-09-18 09:15:00 | 2018-09-18 14:43:13
2018-09-18 08:30:00 | 2018-09-18 14:30:35
2018-09-18 08:30:00 | 2018-09-18 14:26:34
2018-09-18 08:30:00 | 2018-09-18 14:25:17
2018-09-18 08:30:00 | 2018-09-18 14:24:09
2018-09-18 08:30:00 | 2018-09-18 14:23:53
2018-09-18 08:30:00 | 2018-09-18 14:23:07
2018-09-18 08:30:00 | 2018-09-18 14:22:26  
2018-09-14 08:15:00 | 2018-09-14 13:17:09
2018-09-04 09:15:00 | 2018-09-18 14:34:45
2018-09-04 09:15:00 | 2018-09-18 13:52:47
2018-09-04 09:15:00 | 2018-09-18 13:21:10
2018-09-04 09:15:00 | 2018-09-18 13:02:11
2018-09-04 09:15:00 | 2018-09-18 12:59:01    
2018-09-04 09:15:00 | 2018-09-18 01:47:07
2018-09-04 09:15:00 | 2018-09-14 13:40:42

但是,我从查询结果中得到的是:

        DOS          |     CreatedOn
2018-09-04 09:15:00 | 2018-09-18 14:34:45
2018-09-04 09:15:00 | 2018-09-18 13:52:47
2018-09-04 09:15:00 | 2018-09-18 13:21:10
2018-09-04 09:15:00 | 2018-09-18 13:02:11
2018-09-04 09:15:00 | 2018-09-18 12:59:01
2018-09-04 09:15:00 | 2018-09-18 01:47:07
2018-09-04 09:15:00 | 2018-09-14 13:40:42
2018-09-14 08:15:00 | 2018-09-14 13:17:09
2018-09-18 08:30:00 | 2018-09-18 14:30:35
2018-09-18 08:30:00 | 2018-09-18 14:26:34
2018-09-18 08:30:00 | 2018-09-18 14:25:17
2018-09-18 08:30:00 | 2018-09-18 14:24:09
2018-09-18 08:30:00 | 2018-09-18 14:23:53
2018-09-18 08:30:00 | 2018-09-18 14:23:07
2018-09-18 08:30:00 | 2018-09-18 14:22:26
2018-09-18 09:15:00 | 2018-09-18 14:43:13

这是我的查询:

Select V.DOS,V.CreatedOn from Visits As V where V.DOS between '2018-09-01 00:00:00' and '2018-09-19 00:00:00' Order by V.DOS, V.CreatedOn desc

这两个字段都是日期时间字段。不知道为什么我没有得到正确的订单。当我从订单列表中删除任何一个字段并只留下一个字段时,它会正确排序。但是当我将它们都放入 order by 列表时,它不是首先按第一列排序。

【问题讨论】:

    标签: sql-server datetime sql-order-by


    【解决方案1】:

    您在 order by 子句中缺少 V.DOS 之后的 desc。您需要在每个日期之后按降序排列。目前是按DOS升序排序,CreatedOn降序排序

    【讨论】:

    • 就是这样。这是特定于日期订购的东西吗?以前从未对其他类型这样做过。
    • 默认情况下,每列按升序排列。如果要按降序排序,需要为每一列指定。
    【解决方案2】:

    您在 v.dos 之外的列上进行过滤和排序,但在 ServiceDate 上没有

    请检查列!

    另外,在每个订单上按列添加 desc

    【讨论】:

    • 哦,很好。我忘记在帖子里改了。我发布的查询是该问题的最小可验证示例,在完整查询中,该字段别名为“ServiceDate”。
    • 您使用的是哪个查询引擎? (oracle、teradata、hive 等)
    • try Order by V.DOS desc, V.CreatedOn desc
    猜你喜欢
    • 2015-03-31
    • 2015-01-19
    • 2014-08-29
    • 2015-05-08
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多