簡體   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