t-SQL получает исходный заказ и переупорядочивает заказ только в том случае, если заказ был выполнен в течение 30 дней. Не получить ожидаемых результатов - PullRequest
2 голосов
/ 31 января 2012

Я создал две временные таблицы, одна из которых предназначена для заказов, а другая - для повторных заказов в течение 30 дней из временной таблицы заказов.Я хотел бы видеть оригинальный заказ и любой повторный заказ в течение 30 дней.Хотя использование двух временных таблиц сработало бы.

Первая временная таблица с именем #orders содержит все заказы за прошедший год.#orders Поля: RecordID (текст), дата заказа, дата отгрузки

Для второй таблицы я использовал функцию dateadd, чтобы получить любой заказ в течение 30 дней с даты доставки выше, она имеет те же поля (#reorder)

Select recorded, orderdate, shipdate
Into #reorder
Where shipdate between dateadd(day, 1, p.eff_to) and dateadd(day, 30,p.eff_to)

Мой запрос на получение исходного заказа и любых повторных заказов (исключая любые заказы, которые не имели повторного заказа в течение 30 дней путем объединения двух таблиц:

Select o.recordid, o.orderdate, o.shipdate, r.recordid, r.orderdate, r.shipdate
From #orders o
Left join #reorder 
Where o.recordid = r.recordid and o.shipdate between dateadd(day, -30,orderdate)    
and dateadd(day, -1, r.orderdate)

Iпроверил некоторые результаты, и я либо не получаю все возвращенные записи, либо возвращаем избыточные записи.

Sample data 1:

#orders     
RecordID    Orderdate   ShipDate
525     1/8/2011        1/10/2011
525     3/22/2011       3/23/2011
525     4/5/2011        4/6/2011
525     4/12/2011       6/4/2011


#reorder    Orderdate   ShipDate
525     4/5/2011        4/6/2011
525     4/12/2011       6/4/2011


Results:    Orderdate   ShipDate
 525    3/22/2011   3/23/2011
 525    3/22/2011   3/23/2011
 525    4/5/2011    4/6/2011

expected results    
Orderdate   ShipDate
525     3/22/2011       3/23/2011
525     4/5/2011        4/6/2011
525     4/12/2011       6/4/2011

Sample #2:

#orders     
RecordID    Orderdate   ShipDate
101     2/22/2011       3/3/2011
101     5/22/2011       6/6/2011
101     6/27/2011       7/8/2011
101     7/11/2011       7/19/2011
101     11/25/2011      12/1/2011

#reorder    Orderdate   ShipDate
101      6/27/2011      7/8/2011
101      7/11/2011      7/19/2011


Results:    Orderdate   ShipDate
101     6/27/2011       7/8/2011
101     7/11/2011       7/19/2011


Expected results:   
Orderdate   ShipDate
101     5/22/2011       6/6/2011
101     6/27/2011       7/8/2011
101     7/11/2011       7/19/2011

1 Ответ

2 голосов
/ 31 января 2012

Мой запрос, чтобы получить исходный заказ и любые повторные заказы (исключить любые заказы, которые не имели повторного заказа в течение 30 дней, присоединившись к двум Таблицы есть:

Образец - Ожидаемый результат - 3 не должен появляться в наборе результатов => Поскольку он нарушает вышеприведенное утверждение, поскольку оно не приходит через 30 дней.

Вы можете проверить запрос ниже.

create table #orders
(
    RecordID int,
    orderdate datetime, 
    shipdate datetime
)

create table #reorder
(
    Reorder int,
    orderdate datetime, 
    shipdate datetime
)
insert into #orders(RecordID,orderdate, shipdate)
values(525, '1/8/2011', '1/10/2011')

insert into #orders(RecordID,orderdate, shipdate)
values(525, '3/22/2011', '3/23/2011')


insert into #orders(RecordID,orderdate, shipdate)
values(525, '4/5/2011', '4/6/2011')


insert into #orders(RecordID,orderdate, shipdate)
values(525, '4/12/2011', '6/4/2011')


insert into #reorder(Reorder,orderdate, shipdate)
values(525, '4/5/2011', '4/6/2011')


insert into #reorder(Reorder,orderdate, shipdate)
values(525, '4/12/2011', '6/4/2011')

Select o.recordid, o.orderdate, o.shipdate, r.Reorder, 
r.orderdate, r.shipdate
From #orders o
Inner join #reorder r on o.recordid = r.Reorder
Where  r.shipdate between dateadd(day, -1, o.orderdate)    
and dateadd(day, 30,o.orderdate)

drop table #orders
drop table #reorder
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...