Мне нужно написать запрос со следующими требованиями:
Запрос должен возвращать список всех значений записи для клиента с именем «Стив» и для каждой показанной даты (если она доступна)последние сведения о статусе на эту дату.
Таблица клиентов
CustomerID | CustomerName
1 | Steve
2 | John
Таблица записей
CustomerID | EntryDate | EntryValue
1 | 5/4/2010 | 200.0
1 | 4/4/2010 | 100.0
1 | 3/4/2010 | 150.0
1 | 2/4/2010 | 170.0
2 | 5/4/2010 | 220.0
Таблица состояния
CustomerID | StatusDate | Detail
1 | 5/28/2010 | D
1 | 4/24/2010 | S
1 | 4/5/2010 | P
1 | 2/28/2010 | A
Ожидаемый результат:
CustomerName | Date | OrderCost | Detail
Steve | 5/4/2010 | 200.0 | S
Steve | 4/4/2010 | 100.0 | A
Steve | 3/4/2010 | 75.0 | A
Steve | 3/4/2010 | 75.0 | <null>
Я думаю, что ожидаемый результат может быть неправильным, и он на самом деле должен быть:
CustomerName | Date | OrderCost | Detail
Steve | 5/4/2010 | 200.0 | S
Steve | 4/4/2010 | 100.0 | A
Steve | 3/4/2010 | 150.0 | A
Steve | 2/4/2010 | 170.0 | <null>
Учитывая требование, я не понимаю, почему дата 3/4/2010 должна была бы произойти дважды, и во второй раз она будет иметь Детали.Я написал следующий запрос:
Я написал следующий запрос:
SELECT Customers.CustomerName, Entries.EntryDate, Entries.EntryValue, Status.Detail
FROM Customers
INNER JOIN Entries ON Customers.CustomerID = Entries.CustomerID
LEFT OUTER JOIN Status ON Status.CustomerID = Customers.CustomersID AND Status.StatusDate <= Entries.EntryDate
WHERE (Customers.CustomerName = 'Steve')
Результат моего запроса таков:
CustomerName| EntryDate | EntryValue | Detail
Steve | 5/4/2010 | 200.00 | S
Steve | 5/4/2010 | 200.00 | P
Steve | 5/4/2010 | 200.00 | A
Steve | 4/4/2010 | 100.00 | A
Steve | 3/4/2010 | 150.00 | A
Steve | 2/4/2010 | 170.00 | NULL
Любые намеки на то, что я 'я здесь не так?Я не могу понять ...
Обновление Я изменил заказ на запись, чтобы нас это не смущало.