小编use*_*463的帖子

查询以获取每个组的队列位置

我有一个包含以下示例数据的队列表:

id  company location
1   acme    new york
2   acme    philadelphia
3   genco   st.louis
4   genco   san diego
5   genco   san francisco
6   acme    miami
Run Code Online (Sandbox Code Playgroud)

我想查询每个公司组的队列位置以显示每个公司的排队位置(假设 acme 在 500 Genco 开始之前有 1,000 行,然后在 Genco 记录过程之后 acme 有 5,000 行)。我想要的结果如下所示:

queuePositionId company
1    acme
3    genco
6    acme
Run Code Online (Sandbox Code Playgroud)

我玩过排名和分组,但事实上一个公司组可以在队列中的任何地方多次出现,这一直在扰乱我的聚合。我也尝试过,dense_rank但无法弄清楚顺序。有任何想法吗?

sql-server t-sql sql-server-2008-r2 group-by gaps-and-islands

6
推荐指数
1
解决办法
516
查看次数

在查询结果集中生成数字模式

我希望在我的结果集中添加一个人工分组。我不能使用ROW_NUMBERRANK

从以下结果中获取SELECT Col1, Col2 FROM myTbl

Col1     Col2
----     ----
x        y
x        z
y        x
z        x
x        z
y        x
Run Code Online (Sandbox Code Playgroud)

我想添加一个将计数为 3 然后重复的列,以便我可以在需要时细分结果集:

Divider  Col1     Col2
-------  ----     ----
1         x        y
2         x        z
3         y        x
1         z        x
2         x        z
3         y        x
Run Code Online (Sandbox Code Playgroud)

当然,最简单的方法是使用游标或临时表遍历结果集并添加它,但是当结果集是 400 万行时,性能会很糟糕。

任何人都知道如何将此 Divider 列直接添加到SELECT语句中?

实际上,查询将检索按日期排序的结果集,但我仍然希望分隔符以固定方式进行计数。如果我尝试分区并使用 row_number,则序列将是不可预测的。假设我想获取更大的结果集并将其分布在一组队列中,但我希望它们按日期均匀分布,以确保每个队列都在处理最新的数据。如果我按日期排序并细分只有一个队列将获得最新数据。

我实际上并没有返回结果集中的日期;我只是按它订购。

sql-server sql-server-2008-r2

4
推荐指数
1
解决办法
66
查看次数