#sql-server
#sql-сервер
Вопрос:
У меня есть 2 таблицы, что-то вроде этого:
Арендует
идентификатор, LeaseDate
LeaseInvoices
ID, LeaseID, InvoiceDate, StartDate
Как я могу найти все случаи, когда дата аренды не совпадает с InvoiceDate счета-фактуры с первой начальной датой?
Я не могу понять, как это сделать, что-то в этомроде?
SELECT * FROM LeaseInvoice
INNER JOIN Leases ON Leases.ID = LeaseInvoices.LeaseID
WHERE LeaseDate IS NULL
OR LeaseDate <> (
SELECT TOP 1 InvoiceDate FROM LeaseInvoices
ORDER BY StartDate DESC
)
Комментарии:
1. я не совсем понимаю вашу логику, но, глядя на нее, вы должны иметь возможность получать нужные даты выставления счетов с помощью функции ROW_NUMBER ()
2. Возможно, добавление образца данных и ожидаемого результата сделало бы этот вопрос более понятным
Ответ №1:
Для этого можно использовать ROW_NUMBER()
функцию, например:
SELECT
ID
, LeaseDate
, InvoiceDate
, StartDate
FROM
(
SELECT
L.ID
, L.LeaseDate
, I.InvoiceDate
, I.StartDate
, ROW_NUMBER() OVER (PARTITION BY L.ID ORDER BY I.StartDate) R
FROM
Leases L
JOIN LeaseInvoices I ON L.ID = I.LeaseID
) Q
WHERE
R = 1
AND LeaseDate <> InvoiceDate