АР
Цель вашей хотелки совершенно не понятна.
Size: a a a
АР
АР
select
*
from
(select 1, 2, 3) t1 (a, b, c) full join
(select 1, 2, 3) t2 (a, b, c) on 1 = 1;
select
*
from
(select 1, 2, 3 where 1 = 0) t1 (a, b, c) full join
(select 1, 2, 3) t2 (a, b, c) on 1 = 1;
select
*
from
(select 1, 2, 3) t1 (a, b, c) full join
(select 1, 2, 3 where 1 = 0) t2 (a, b, c) on 1 = 1;
B
Н
SELECTТакже на mod_date ASC есть индекс формата Non-Clustered
DISTINCT order_id, mod_date, id
FROM
mytable as [data]
WHERE
mod_date < '2021-01-08 00:00:00'
AND
mod_date = (SELECT
MAX(mod_date)
FROM
mytable
WHERE
order_id = [data].order_id)
ORDER BY mod_date
OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLY
AC
mytable, резалтсет может быть намного больше. Проблема здесь ещё в том, что не получится отсечь по дате, т.к. неизвестно есть ли для order_id в заданном диапазоне именно максимальное значение по mod_date.AC
(order_id, mod_date DESC) возможно помог быAC
SELECT t.id,
t.order_id,
t.mod_date
FROM (
SELECT id,
order_id,
mod_date,
CASE WHEN ROW_NUMBER() OVER (
PARTITION BY order_id
ORDER BY mod_date DESC
) = 1 THEN 1 ELSE 0 END AS last_order_flag
FROM mytable AS [data]
) AS t
WHERE t.last_order_flag = 1
AND t.mod_date < '20210108'
OFFSET 0 ROWS FETCH NEXT 1000 ROWS ONLYАР
with t as
(
select
order_id, mod_date, id,
row_number() over (partition by order_id order by mod_date desc) as rn
from
mytable
where
mod_date < '2021-01-08 00:00:00'
)
select
order_id, mod_date, id
from
t
where
rn = 1;
Е
Н
AC
Н
WHERE
mod_date < '2021-01-08 00:00:00'
АР
AC
Н
АР
AC
Н
АР
AC