我有一个小东西,基本上我是从桌子上拿出结果的,而且有两个来自'来自' (日期时间)和'到' (日期时间)字段,但我只取出那些来自' =今天或'至今天的字段,但我不能做的就是按顺序排序日期时间,没有第一个'来自'在' 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
这会产生一个按照从/到然后按日期时间排序的列表
答案 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