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