Как разбить результаты стека Exchange Data Explorer (SEDE)?
Использование проводника данных для создания запросов:
SELECT P.id, creationdate,tags,owneruserid,answercount
--SELECT DISTINCT TAGNAME ,TAGID
FROM TAGS AS T
JOIN POSTTAGS AS PT
ON T.ID = PT.TAGID
JOIN POSTS AS P
ON PT.POSTID = P.ID
--WHERE CAST(P.TAGS AS VARCHAR) IN('JAVA')
WHERE PT.TAGID = 3143
Как можно добавить нумерацию страниц в запросе, чтобы получить не только первые 50000 результатов, но затем снова выполнить запрос, чтобы получить следующие оставшиеся результаты?
1 ответ
Решение
Есть несколько способов "пролистать" результаты TSQL; увидеть:
- Как вернуть страницу результатов из SQL?
а также - Производительность SQL: ГДЕ против ГДЕ (ROW_NUMBER)
Здесь я буду использовать метод CTE как:
- Он использует удобные номера строк для просмотра результатов, а не пытается отслеживать менее предсказуемые факторы, такие как
creationdate
, - По сообщениям, он работает быстрее, чем
OFFSET
метод.
Таким образом, запрос этого вопроса становится этим запросом SEDE:
-- StartRow: Starting row for paging
-- EndRow: Ending row for paging (Max 50K rows at a time)
WITH allData AS (
SELECT
ROW_NUMBER() OVER (ORDER BY P.creationdate) AS row
, P.id
, P.creationdate
, P.tags
, P.owneruserid
, P.answercount
FROM Posttags AS PT
JOIN Posts AS P ON PT.postid = P.id
WHERE PT.tagid = 3143 -- tag [scala]
)
SELECT *
FROM allData
WHERE row >= ##StartRow:INT?1##
AND row <= ##EndRow:INT?50000##
ORDER BY row