我有一个包含以下示例数据的队列表:
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
我希望在我的结果集中添加一个人工分组。我不能使用ROW_NUMBER
或RANK
。
从以下结果中获取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,则序列将是不可预测的。假设我想获取更大的结果集并将其分布在一组队列中,但我希望它们按日期均匀分布,以确保每个队列都在处理最新的数据。如果我按日期排序并细分只有一个队列将获得最新数据。
我实际上并没有返回结果集中的日期;我只是按它订购。