【发布时间】:2013-03-21 21:07:26
【问题描述】:
我正在尝试找出我数据库中的订阅者在一天中打开电子邮件最多的时间。
我有一个包含一堆订阅者 ID 的表,我还有另一个表,其中电子邮件打开记录映射到一个表,该表存储已发送的电子邮件,然后映射到特定的订阅者 ID。
所以我的基本愿望是获得一个表格输出,其中每一行都是一个特定的订阅者(订阅者 ID)以及他们打开最多电子邮件的时间。所以我需要先检查每个订阅者 ID,然后我猜想创建一个临时表,每一行是一个不同的小时,与他们在该小时打开的电子邮件数量相关联。然后我需要选择 Max 以从该临时表中获取最大行,然后我需要将其放入我的输出表中,并为下一个订阅者重复。
我只关心一天中的时间。我不在乎月份、年份或时间。我只是想知道人们在一天中的哪个时间点最常打开电子邮件。
我一直在尝试使用 CTE 和 while 循环,但无济于事。任何帮助将不胜感激。
这是(最小化的)结构:
表:订阅者
|订阅者 ID |姓氏 |名字 |
| 9999999999 |史密斯 |约翰 |
表:SentEmail
| message_id |订阅者 ID |
| 9028340 | 9999999999 |
表:打开电子邮件
| open_id | message_id | dtoped |
| 9923489 | 9028340 | '2011-11-22 15:53:02.157' |
我的目标是这样的输出表(最后一列是不必要的),每个subscriber_id 在列表中都是唯一的:
|订阅者 ID |开放时间 |打开次数 |
| 999999999 | 10 | 32 |
【问题讨论】:
-
欢迎来到 SO。解决此问题的最佳方法是使用 SQLFiddle (sqlfiddle.com) 创建您的数据定义以及您迄今为止尝试过的内容 (DML)。
-
尝试加入这些表,然后按订阅者 ID、DATEPART(HH,opendate) 分组,然后依靠电子邮件 ID 或其他东西。如果您需要查询代码,则需要共享您的架构和一些示例数据。
标签: sql sql-server sql-server-2005 sql-server-2008-r2