[英]Joining tables based on two columns based on MAX for another column
我有一个表HistoricCall
和另一个Responses
。 可以使用以下查询连接两个表:
SELECT *
FROM HistoricCall h
INNER JOIN Responses r ON h.projectid = r.projectId
AND h.caseId = r.caseId
HistoricCall
表有一列用于记录我们每次呼叫某人的尝试次数 ( h.callNumber
)。
我正在尝试编写一个显示如下的查询:
SELECT
h.callDate,
r.cellmap,
COUNT(*)
...但仅显示对应于每条记录的最高h.callDate
的callNumber
。
来自HistoricCall
的示例数据:
项目编号 | 案例ID | 电话号码 | 通话日期 |
---|---|---|---|
100018 | 0000000001 | 1 | 2014-09-11 16:32:11.000 |
100018 | 0000000001 | 2 | 2014-09-11 20:43:01.000 |
100018 | 0000000001 | 3 | 2014-09-12 21:09:55.000 |
100018 | 0000000001 | 4 | 2014-09-13 14:58:14.000 |
100018 | 0000000001 | 5 | 2014-09-14 16:42:27.000 |
100018 | 0000000001 | 6 | 2014-09-16 21:54:09.000 |
100018 | 0000000001 | 7 | 2014-09-16 22:30:24.000 |
100018 | 0000000002 | 1 | 2014-09-11 16:36:17.000 |
100018 | 0000000002 | 2 | 2014-09-13 18:05:44.000 |
100018 | 0000000002 | 3 | 2014-09-14 16:39:03.000 |
来自Responses
的示例数据:
项目编号 | 案例ID | 细胞图 |
---|---|---|
637850 | 0000000001 | 9101 |
637850 | 0000000002 | 9052 |
637850 | 0000000003 | 5071 |
637850 | 0000000004 | 5173 |
637850 | 0000000005 | |
637850 | 0000000006 | 8062 |
637850 | 0000000007 | 0012 |
637850 | 0000000008 | 5292 |
637850 | 0000000009 | 9230 |
637850 | 0000000010 | 5187 |
我希望是这样的:
项目编号 | 通话日期 | 细胞图 | 数数 |
---|---|---|---|
637850 | 2014-09-11 | 0012 | 3 |
637850 | 2014-09-11 | 0014 | 7 |
637850 | 2014-09-12 | 0012 | 4 |
637850 | 2014-09-12 | 0014 | 2 |
我希望这是有道理的,我很感激你的时间。
您可以将 celldate 从 datetime 转换为 date 并且简单的 group by 应该可以工作。
SELECT
Max(h.projectid) projectid, -- if you need project id of call you can also include it in the group by clause
h.callDate,
r.cellmap,
COUNT(*)
FROM HistoricCall h
INNER JOIN Responses r ON h.projectid = r.projectId
AND h.caseId = r.caseId
group by cast(h.callDate as date), r.cellmap
您可以使用子查询创建连接,以通过 projectId 和 caseId 分组获取最大 callNumber。 由于 callNumber 根据上面的示例递增,因此无需进行计数。
提琴供参考
SELECT h.projectId AS "projectId",
cast(h.callDate AS date) AS "callDate", --cast as date
r.cellmap AS "cellmap",
m.maxCall AS "Count"
FROM HistoricCall h
INNER JOIN Responses r
ON h.projectid = r.projectId
AND h.caseId = r.caseId
INNER JOIN (SELECT projectid,
caseId,
max(callNumber) maxCall --get max call number
FROM HistoricCall
GROUP BY projectid,
caseId) m
ON h.projectId = m.projectId
AND h.caseId = m.caseId
AND h.callNumber = m.maxCall
WHERE r.cellmap IS NOT NULL --remove if empty cellmap values can be included
GROUP BY h.projectId,
cast(h.callDate AS date),
r.cellmap,
m.maxCall
ORDER BY h.projectId,
cast(h.callDate AS date),
r.cellmap ASC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.