【问题标题】:Count how many times an item appears in a Snapshot in SQL计算一个项目在 SQL 的快照中出现的次数
【发布时间】:2018-01-11 15:12:12
【问题描述】:

正如标题所说,我需要计算 ProductId 在每个快照中出现的次数,但我似乎不知道如何计算。

基本上,我需要对 Table1 进行更新,以便填充列计数,如下所示。 还要考虑到 Table1 有 100,000 个不同的 ProductID

表 1(原始)

SnapshotTimeId  ProductID   Count
20170131        15748       NULL
20170228        15748       NULL
20170331        15748       NULL
20170630        578455      NULL
20170731        578455      NULL
20170831        578455      NULL
20170930        578455      NULL

Table1(更新后)

SnapshotTimeId  ProductID   Count
20170131        15748       1
20170228        15748       2
20170331        15748       3
20170630        578455      1
20170731        578455      2
20170831        578455      3
20170930        578455      4

提前致谢!

【问题讨论】:

  • 关于您的数据,“快照”的定义是什么?您提供的所有 SnapshotTimeId 都是唯一的,每个中只有一 (1) 个 ProductID。
  • SnapshotTimeId 不是唯一的。它以 INT 格式表示日期,例如。 2018 年 1 月 11 日 = 20180111

标签: sql sql-server-2008 sql-server-2012


【解决方案1】:

使用ROW_NUMBER:

WITH cte AS (
    SELECT SnapshotTimeId, ProductID, Count,
        ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY SnapshotTimeId) NewCount
    FROM yourTable
)

UPDATE cte
SET Count = NewCount;

如果您不需要实际更新表格,则只需从 cte 执行 SELECT *

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 2014-10-16
    • 2011-02-08
    • 2014-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多