繁体   English   中英

基于另一列的 MAX 连接基于两列的表

[英]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.callDatecallNumber

来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM