sql - 在滚动两周内查找唯一计数
问题描述
我有一份学生名单以及他们在某些日子喝的饮料
╔════════════╤═════════╤═══════╤═══════╤═══════════════╗
║ Day │ Student │ Class │ Group │ Drinks ║
╠════════════╪═════════╪═══════╪═══════╪═══════════════╣
║ 2019-04-08 │ A │ 3A1 │ 1 │ Coke ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-09 │ A │ 3A1 │ 1 │ Lemon Juice ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-16 │ A │ 3A1 │ 1 │ Green Tea ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-20 │ A │ 3A1 │ 1 │ Green Tea ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-01 │ B │ 3B1 │ 3 │ Pepsi ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-02 │ B │ 3B1 │ 3 │ Apple Juice ║
╟────────────┼─────────┼───────┼───────┼───────────────╢
║ 2019-04-03 │ B │ 3B1 │ 3 │ Mineral Water ║
╚════════════╧═════════╧═══════╧═══════╧═══════════════╝
我想知道每个学生在连续 14 天(每周一到下周日)有多少独特的饮料。最终输出应该是这样的
╔═════════════╤═════════╤═══════╤═══════╤════════════════════╗
║ Week Ending │ Student │ Class │ Group │ Unique Drink Count ║
╠═════════════╪═════════╪═══════╪═══════╪════════════════════╣
║ 2019-04-14 │ A │ 3A1 │ 1 │ 2 ║
╟─────────────┼─────────┼───────┼───────┼────────────────────╢
║ 2019-04-21 │ A │ 3A1 │ 1 │ 3 ║
╟─────────────┼─────────┼───────┼───────┼────────────────────╢
║ 2019-04-14 │ B │ 3B1 │ 3 │ 3 ║
╚═════════════╧═════════╧═══════╧═══════╧════════════════════╝
解释:
- 2019 年 4 月 1 日至 2019 年 4 月 14 日开始的一周:学生 A 喝了可乐和柠檬汁
- 2019 年 4 月 8 日至 2019 年 4 月 21 日开始的一周:学生 A 喝了可乐、柠檬汁和绿茶
- 2019 年 4 月 1 日至 2019 年 4 月 14 日开始的一周:学生 B 喝了百事可乐、苹果汁和矿泉水
我使用的是 Oracle 数据库 11g,所以恐怕没有横向连接或外部应用。
解决方案
IW
您可以使用格式提取一年的周数。然后,除以 2:
select min(day), student, class, group, count(distinct drink)
from (select s.*,
to_number(to_char(day, 'IW')) - 1 as week_number
from students s
) s
group floor(week_number / 2), student, class, group;
目前尚不清楚您是想在偶数周还是奇数周开始,因此- 1
可能没有必要。
请注意,这group
是一个非常糟糕的列名称,因为它是一个 SQL 关键字。
推荐阅读
- azure-ad-b2c - B2C 是否支持使用 PKCE 的 Grant Flow?
- java - 将此字段值直接注入“studentStepOne”,唯一使用它的方法
- python - pandas recursive read_csv 同时为每个添加列
- swift - 如何解决此“<=”不是前缀一元运算符错误?
- javascript - MongoImport csv 将各种列组合/连接到一个数组以进行导入
- google-cast - 如何在自定义接收器中捕获媒体事件(播放/暂停/下一个等)?
- google-apps-script - 如何在 Google 应用程序脚本中使用 For 循环将数据存储在数组中 - 按值传递数组
- android - 如何在 Kotlin 的数据类中保存旧数据
- python - 如何在没有所需参数的情况下调用函数?
- unity3d - 是否有任何开发人员使用 Unity OVRInput 类来访问 Oculus 辅助控制器?