2017-08-24 11 views
0
create table Orders 
(
city varchar(5) 
,orderid int 
,OrderedDateTime datetime 
,ThresholdDatetime datetime 
) 

insert into Orders values ('Texas',23,'2017-08-24 12:20:56.560','2017-08-24 20:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-24 13:20:45.560','2017-08-24 22:20:23.000') 
insert into Orders values ('Texas',23,'2017-08-24 16:20:45.560','2017-08-24 20:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-24 17:20:23.560','2017-08-24 22:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-23 12:20:23.560','2017-08-23 14:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-23 13:20:23.560','2017-08-23 21:20:23.000') 
insert into Orders values ('Texas',23,'2017-08-23 16:20:23.560','2017-08-23 20:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-23 18:20:23.560','2017-08-23 20:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-22 12:20:23.560','2017-08-22 14:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-22 13:20:23.560','2017-08-22 21:20:23.000') 
insert into Orders values ('Texas',23,'2017-08-22 16:20:23.560','2017-08-22 20:00:23.000') 
insert into Orders values ('Texas',23,'2017-08-22 19:20:23.560','2017-08-22 20:00:23.000') 

Given data as below[![][1]]要件は、それぞれのレコードを返す必要があります「ThresholdDateTime」列から「orderedDateTime」列から最新の日時と最新の日時を取得することです2クエリは、2列の最新の日時を取得するには、個別に

日である。 私はすでにこのためのソリューションを持っていますが、私は私のクエリは、パフォーマンスは次のようにコーディングしてみ

select city,orderid, max(OrderedDateTime) as MaxOrderedDateTime ,max(ThresholdDatetime) as MaxThresholdTime 
,day(ThresholdDatetime) as [UniqueDay] 
from dbo.Orders 
where OrderedDateTime<=ThresholdDatetime 
and convert(date,OrderedDateTime)=convert(date,ThresholdDatetime) 
group by city,orderid,day(ThresholdDatetime) 
+4

を鉱山より良い答えを求めていますクエリにパフォーマンスの問題がありますか?探しているデータを返すには、クエリが正しいと思われます。 –

+0

何らかのエラーが発生しましたか? – kazzi

+0

このクエリは、30日後に曜日(ThresholdDatetime)の出力が繰り返されるため、1か月以上のデータがある場合は間違った出力を返します。だからあなたは、あなたが持っているデータの量に基づいて、Group By節のMonth(ThresholdDatetime)とYear(ThresholdDatetime)にする必要があります。 –

答えて

0

を発行したと思うようだと思います...なぜ、

SELECT 
    o.city, 
    o.orderid, 
    MaxOrderedDateTime = MAX(o.OrderedDateTime), 
    MaxThresholdTime = MAX(o.ThresholdDatetime) 
FROM 
    #Orders o 
GROUP BY 
    o.city, 
    o.orderid, 
    CAST(o.OrderedDateTime AS DATE); 
関連する問題