我有一个包含三列的表:tasks,shift和worker_ID。任务中的任务可以由worker_ID中的多个worker执行。
View view = getLayoutInflater().inflate(R.layout.activity_main, null, false);
imageView = (ImageView) view.findViewById(R.id.image);
setContentView(view);
我想创建一个sql查询来计算每个特定班次中每个worker_ID的出现次数,以返回以下附加列(num_occ):
tasks | shift | worker_ID
------|-------|----------
111 | 127 | 233
111 | 127 | 34
111 | 127 | 455
333 | 127 | 444
333 | 127 | 34
333 | 127 | 200
333 | 127 | 100
444 | 127 | 34
444 | 127 | 567
444 | 127 | 888
666 | 125 | 100
666 | 125 | 200
666 | 125 | 345
666 | 125 | 100
555 | 125 | 34
555 | 125 | 100
555 | 125 | 457
非常感谢任何帮助。 感谢
答案 0 :(得分:1)
您可以使用变量轻松完成此操作:
select t.*,
(@rn := if(@ws = concat_ws(':', worker_id, shift), @rn + 1,
if(@ws := concat_ws(':', worker_id, shift), 0, 0)
)
)
from t cross join
(select @rn := -1, @ws := '') params
order by worker_id, shift;
答案 1 :(得分:0)
我相信你可以使用the OVER clause and a windowed function来实现你想要的结果。
SELECT tasks, [shift], worker_ID,
(ROW_NUMBER() OVER (PARTITION BY [shift], worker_ID ORDER BY tasks, [shift])) -1 AS num_occ
FROM Tasks
ORDER BY tasks;
我实际上并不了解您在示例中显示的输出表,但此代码确实实现了相同的结果。