Я пытаюсь реализовать подкачку, которая немного отличается.
Для простого примера предположим, что у меня есть таблица, определенная и заполненная следующим образом:
DECLARE @Temp TABLE
(
ParentId INT,
[TimeStamp] DATETIME,
Value INT
);
INSERT INTO @Temp VALUES (1, '1/1/2013 00:00', 6);
INSERT INTO @Temp VALUES (1, '1/1/2013 01:00', 7);
INSERT INTO @Temp VALUES (1, '1/1/2013 02:00', 8);
INSERT INTO @Temp VALUES (2, '1/1/2013 00:00', 6);
INSERT INTO @Temp VALUES (2, '1/1/2013 01:00', 7);
INSERT INTO @Temp VALUES (2, '1/1/2013 02:00', 8);
INSERT INTO @Temp VALUES (3, '1/1/2013 00:00', 6);
INSERT INTO @Temp VALUES (3, '1/1/2013 01:00', 7);
INSERT INTO @Temp VALUES (3, '1/1/2013 02:00', 8);
TimeStamp
всегда будет тем же самым интервалом, например. ежедневные данные, данные за 1 час, данные за 1 минуту и т.д. Это не будет смешанным.
Для отчетов и презентаций я хочу реализовать пейджинг, который:
- Заказы
TimeStamp
- Запускается с использованием предлагаемого
pageSize
(скажем, 4), но будет автоматически настраиваться на включение дополнительных записей, соответствующихTimeStamp
. Другими словами, если 1/1/2013 01:00 включен для одногоParentId
, предлагаемыйpageSize
будет переопределен, и все записи за час 01:00 будут включены для всехParentId's
. Это почти как опцияTOP WITH TIES
.
Таким образом, запуск этого запроса с помощью pageSize
из 4 будет возвращать 6 записей. Есть 3 часа 00:00 и 1 час 01:00
по умолчанию, но поскольку есть больше часа 01:00's
, pageSize
будет отменено, чтобы вернуть весь час 00:00
и 01:00
.
Вот что у меня до сих пор, и я думаю, что я близок, поскольку он работает для первой итерации, но секвенционные запросы для следующих строк pageSize+
не работают.
WITH CTE AS
(
SELECT ParentId, [TimeStamp], Value,
RANK() OVER(ORDER BY [TimeStamp]) AS rnk,
ROW_NUMBER() OVER(ORDER BY [TimeStamp]) AS rownum
FROM @Temp
)
SELECT *
FROM CTE
WHERE (rownum BETWEEN 1 AND 4) OR (rnk BETWEEN 1 AND 4)
ORDER BY TimeStamp, ParentId
ROW_NUMBER обеспечивает минимальное значение pageSize, но RANK будет содержать дополнительные связи.