我的结果表是:
FDate FTime FNo FId FRID FRCont
2016-12-19 07:25:00 1254 A1 A1 1
2016-12-19 08:45:00 1322 A2 A1 2
2016-12-19 13:20:00 4521 B1 B1 1
2016-12-19 16:40:00 7841 B2 B1 2
2016-12-19 20:45:00 1258 B3 B1 3
2016-12-19 11:25:00 3254 C1 C1 1
2016-12-19 13:10:00 3145 C2 C1 2
2016-12-19 15:20:00 3333 C3 C1 3
2016-12-20 07:35:00 7777 C4 C1 4
2016-12-20 08:50:00 7851 D1 D1 1
2016-12-20 10:30:00 45123 D2 D1 2
我希望按日期和时间排序(FCont = 1行) 但我不希望在FRID和FRCont列中按值更改关系。 看起来像这样:
FDate FTime FNo FId FRID FRCont
2016-12-19 07:25:00 1254 A1 A1 1
2016-12-19 08:45:00 1322 A2 A1 2
2016-12-19 11:25:00 3254 C1 C1 1
2016-12-19 13:10:00 3145 C2 C1 2
2016-12-19 15:20:00 3333 C3 C1 3
2016-12-20 07:35:00 7777 C4 C1 4
2016-12-19 13:20:00 4521 B1 B1 1
2016-12-19 16:40:00 7841 B2 B1 2
2016-12-19 20:45:00 1258 B3 B1 3
2016-12-20 08:50:00 7851 D1 D1 1
2016-12-20 10:30:00 45123 D2 D1 2
请在sql server查询中以任何方式解决。 非常感谢。
答案 0 :(得分:2)
我认为你正在寻找这样的东西:
SELECT FDate, FTime, FNo, FId, FRID, FRCont
FROM (
SELECT FDate, FTime, FNo, FId, FRID, FRCont,
MIN(FDate) OVER (PARTITION BY FRID) AS Min_Date,
MIN(FTime) OVER (PARTITION BY FRID) AS Min_Time
FROM mytable ) AS t
ORDER BY Min_Date, Min_Time, FRID, FDate, FTime
情侣(Min_Date, Min_Time)
为每个FRID
切片提供起始日期时间值。使用这对,我们可以对每个切片进行排序,首先放置具有最低日期时间值的切片,然后是具有下一个日期时间值的切片,等等。
答案 1 :(得分:0)
请试试这个:
select FDate,FTime, FNo,FId,FRID,FRCont from (
select t.*
,min(fdate+ftime) over (partition by frid) mn
from t) t
order by mn, frcont;
答案 2 :(得分:0)
您似乎希望按每个组的最短日期/时间排序:
select t.*
from t
order by min(date + time) over (partition by frid),
frid,
fid;
注意:您可能需要将日期/时间转换为datetime
才能使添加工作。