SQL订单表由2个日期时间字段

时间:2017-08-03 11:09:53

标签: sql sql-order-by

我有一个小东西,基本上我是从桌子上拿出结果的,而且有两个来自'来自' (日期时间)和'到' (日期时间)字段,但我只取出那些来自' =今天或'至今天的字段,但我不能做的就是按顺序排序日期时间,没有第一个'来自'在' to'之后,我想把它们混合起来,然后按顺序排序。

结果的一个例子是:

name          from/to     date time
lorem         from        03/08/2017 10:38
ipsum         to          03/08/2017 11:25
lorem         from        03/08/2017 12:10

我试过查询:

SELECT * 
  FROM bookings 
 WHERE "'.$date.'"=LEFT(from, 10) 
    OR "'.$date.'"=LEFT(to, 10) 
 ORDER BY date time

这会产生一个按照从/到然后按日期时间排序的列表

3 个答案:

答案 0 :(得分:0)

据我所知,你正在寻找类似的东西:

首先选择SELECT以获取具有from-date的行 - 其中我添加了一个EVEN rownumber。 第二个SELECT获取带有到期日的行 - 其中我添加了一个ODD rownumber

最后我只是用rownumber对它们进行排序。因为他们甚至有&奇怪的rownumbers,他们将是混合的。

SELECT a.name 
      ,a.from_to
      ,a.mydate
  FROM
  (
    SELECT name
          ,'from' AS from_to
          ,date_from as mydate
          ,(ROW_NUMBER() OVER (ORDER BY name))  * 2     AS rownum
     WHERE date_from = CONVERT(DATE, GETDATE())  
    UNION ALL
    SELECT name
          ,'to' AS from_to
          ,date_to as mydate
          ,(ROW_NUMBER() OVER (ORDER BY name))  * 2 + 1 AS rownum
     WHERE date_to = CONVERT(DATE, GETDATE())    
   ) a
ORDER BY a.rownum   

答案 1 :(得分:0)

假设您正在使用SQL Server,请合并UNION运算符以合并FROM和TO数据集,然后组合公用表表达式,以根据您的条件从该结果集中选择记录。

;with cte as
(
    select name, 'from' [field], [from] [datetime] from foo
    union all
    select name, 'to' [field], [to] from foo
)
select name, field, [datetime] 
from cte 
where convert(date, [datetime]) = '03/08/2017'
order by 3

这是一个SqlFiddle来演示

答案 2 :(得分:0)

我已经解决了这个问题

SELECT *, (CASE WHEN "'.$date.'" = LEFT(`from`, 10) THEN `from`
                WHEN "'.$date.'" = LEFT(`to`, 10) THEN `to`
          END) AS ttime
FROM `bookings` WHERE "'.$date.'"=LEFT(`from`, 10) OR "'.$date.'"=LEFT(`to`, 10) ORDER BY ttime