1

我有一个大型数据集,我需要进入 excel 才能进行一些数据透视表和分析。

我通常能够做到这一点,因为数据永远不会达到 100 万行标记。我只是执行 SQL Server 数据导入并指定我的 SQL 语句。

这是我当前的 SQL

WITH n AS (
    Select A1.AccountID, A1.ParentAccountID, A1.Name
    FROM Account AS A1
    WHERE A1.ParentAccountID = 92
UNION ALL
    SELECT A2.AccountID, A2.ParentAccountID, A2.Name
    FROM Account AS A2
    JOIN n
    ON A2.ParentAccountID=n.AccountID
)
select n.*, D.DeviceID, A.*, P.*
FROM n
LEFT OUTER JOIN
    Device AS D
    ON D.AccountID = n.AccountID
LEFT OUTER JOIN
    Audit as A
    ON A.AccountID = n.AccountID
RIGHT OUTER JOIN
DeviceAudit As P
ON P.AuditID = A.AuditID
WHERE A.AuditDate > CAST('2013-03-11' AS DATETIME)
ORDER BY n.AccountID ASC, P.DeviceID ASC, A.AuditDate DESC

现在这正在返回给我 100% 我需要的东西。过去 30 天的 1800 万条记录。我希望有一种简单的方法可以找到接下来的 100,000 或 500,000 条记录。

我可以TOP 100000用来获取我的第一个块,尽管我似乎没有可用的偏移量。

目前这运行并在 20 分钟内完成。这是我必须执行此操作的许多帐户层次结构之一。希望这种分页不会太昂贵的 CPU 明智。

我确实尝试导出到 CSV 以希望将其导入,但这只是给了我一个 12GB 的 csv 文件,我没有时间分解。

4

1 回答 1

0

Yes, you can do paginated subqueries on the row number since SQL 2005. Add a row number to the select clause of your original query:

, ROW_NUMBER() OVER (ORDER BY {whatever id}) AS row

Then you can make your old query a subquery and query against the row:

SELECT TOP {results per page} *
FROM ({your previous sql statement})
WHERE row > {page# * results per page}
于 2013-04-15T14:29:50.510 回答