我有一个表,列出活动及其持续时间的顺序,即表按时间排序。它主要有四列:
person_ID,持续时间,活动ID,时间
如何累计持续时间直到达到某个activity_ID? activity_ID描述的活动可以按任何顺序进行。
这张桌子可以列举白天的活动,例如起床,淋浴,刮胡子,吃饭,穿好衣服,穿上鞋子。订单和活动因人而异。
我想总结所有活动的持续时间,直到某个活动例如“穿好衣服”,然后停下来。我如何在SQL中做到这一点?总计一列,直到另一列中的具体值
-1
A
回答
1
不知道这是您正在寻找的内容,而是一种常规技术:根据您是否要包含该标记来打开或关闭某个标记,然后将所有记录与标记相加。
create table activity(person_ID number, duration number, activity_ID number)
insert into activity values(1, 1, 1);
insert into activity values(1, 2, 2);
insert into activity values(1, 3, 3);
insert into activity values(1, 4, 4);
insert into activity values(1, 5, 5);
insert into activity values(2, 10, 1);
insert into activity values(2, 20, 2);
insert into activity values(2, 30, 3);
insert into activity values(2, 40, 4);
insert into activity values(2, 50, 5);
SELECT person_id, SUM(CASE WHEN activity_id <= 3 THEN duration ELSE 0 END) AS sum_till_3
FROM activity
GROUP BY person_id
ORDER BY person_id
PERSON_ID SUM_TILL_3
--------- ----------
1 6
2 60
+0
感谢您的回答,但它不会工作,因为您认为activity_id是一个有序集合,它不在我的示例中。我想总结持续时间,直到出现某个activity_id。或者,换句话说,表格按除activity_id之外的另一列进行排序。 – user1453235 2012-07-23 13:05:26
0
这里是你如何能与普通窗口的功能做到这一点:
select t.user_id, sum(time <= activity_time then duration else 0 end)
from (select t.*,
min(activitytime) over (partition by user_id) as activitytime
from (select t.*,
(case when activity_id = xxx then 1 else 0 end) as isactivity,
(case when activity_id = xxx then time end) as activitytime,
from t
) t
) t
group by user_id
这只是发现当活动发生的每个用户的最小时间,然后添加了持续时间为他们。
+0
一个漂亮的例子。经过一些修改后,代码看起来像下面,完美的作品! SELECT rt.user_id,SUM(CASE WHEN rt.time
相关问题
- 1. 总计基于另一列
- 2. SQL计数/总计直到另一列中的特定日期的呼叫数
- 3. 根据另一列值计算列值
- 4. 得到具有不同值的一列在另一列
- 5. 一列+另一列的总和
- 6. 将一列的总和分组到另一列的一般值的错误
- 7. 如何总结的列值,链接到另一列
- 8. 根据另一列的值计算列的唯一值
- 9. 计算一列中的分类值由另一列分组
- 10. 计算一列文本值的总和
- 11. 我想从一列减去值到同一表中的另一列与具体ID
- 12. 将列的值复制到另一列
- 13. 试图设计一个应该从另一个表中总结数值的列
- 14. 将计数加总到由另一列分组的多个新列中
- 15. 开始SQL - 将一列的值添加到另一个表中的另一列
- 16. 基于另一列的总和列laravel
- 17. 总计行第一列重复值vba
- 18. awk:根据另一列的值打印一列或另一列
- 19. CSV:如果另一列具有特定值,则计算列中的字符串
- 20. 查询中的列不具有在另一列的值相同
- 21. 行一列中具有相同的值,总结所有值在另一列和显示器1行
- 22. 后列值到A列中的最后一行,另一个值列F列A列中发布的同一行
- 23. 一列中的VBA总和范围直到另一列中的非空行为止
- 24. Django在'group by'之后的列的另一列的总和值
- 25. MySQL:如何从另一列中选择一个列的值,具体取决于哪些列是空的?
- 26. 将列中的值复制到另一个工作表中的另一列
- 27. Excel - 用另一列中的值替换一列中的值
- 28. 列的总和取决于另一列的值
- 29. mysql将一列更新到另一个表中的另一列
- 30. 将一列从列表中列出到另一个列的列
什么版本的SQL Server? – 2012-07-23 11:47:45
对activity_ID没有排序? – Matten 2012-07-23 11:48:36
除非您专门订购结果集,否则不保证订购。仅仅因为你在记录之前插入记录b并不意味着当你查询/操作数据/表记录时,a总是会返回记录b的“之前”(除非特别要求)。 – 2012-07-23 11:53:03