對於這篇長文章我很抱歉。這是一些使得它很長的案例陳述。如何根據另一列的值過濾一列?
我有兩個問題。首先是 - 我如何從一個表中獲取所有值,但是也要在自加入中對其自身進行過濾?具體而言,我計算了每天撥打銷售人員的電話數量,並且我的輸出保持截止時間爲凌晨12點和凌晨1點。
第二個問題是 - 如何根據另一列的值過濾一列?
我的一些銷售人員在紐約,所以我想說當created_by LIKE'Johnny Smith'然後從TIME減去3。不知道該怎麼做!
這裏是我的example--
這是我的查詢看起來像...
SELECT CASE
WHEN (EXTRACT(HOUR
FROM task1.time)) = 1 THEN '1am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 2 THEN '2am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 3 THEN '3am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 4 THEN '4am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 5 THEN '5am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 6 THEN '6am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 7 THEN '7am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 8 THEN '8am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 9 THEN '9am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 10 THEN '10am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 11 THEN '11am'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 12 THEN '12pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 13 THEN '1pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 14 THEN '2pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 15 THEN '3pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 16 THEN '4pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 17 THEN '5pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 18 THEN '6pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 19 THEN '7pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 20 THEN '8pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 21 THEN '9pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 22 THEN '10pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 23 THEN '11pm'
WHEN (EXTRACT(HOUR
FROM task1.time)) = 0 THEN '12am'
END AS hour,
COUNT(task2.Activity_ID__Case_Safe_) AS calls
FROM sdr_data.by_task AS task1
LEFT JOIN sdr_data.by_task AS task2
ON task1.Activity_ID__Case_Safe_ = task2.Activity_ID__Case_Safe_
AND task2.task_type LIKE 'Call'
AND task2.status LIKE 'Completed'
AND task2.created_date > DATE_SUB(CURRENT_DATE(), INTERVAL 1
WEEK)
LEFT JOIN
(SELECT account_id__CaseSafe_
FROM sdr_data.by_task
WHERE account_id__CaseSafe_ IN
(SELECT account_id__CaseSafe_
FROM {{@dummy_accounts}})) AS subquery
ON task2.account_id__CaseSafe_ = subquery.account_id__CaseSafe_
RIGHT JOIN
(SELECT created_by,
Activity_ID__Case_Safe_
FROM sdr_data.by_task
WHERE created_by IN
(SELECT full_name
FROM {{@active_salespeople}})) AS subquery2
ON task1.Activity_ID__Case_Safe_ = subquery2.Activity_ID__Case_Safe_
WHERE task1.created_by IS NOT NULL
AND subquery.account_id__CaseSafe_ IS NULL
GROUP BY 1
ORDER BY CASE
WHEN HOUR LIKE '12am' THEN 1
WHEN HOUR LIKE '1am' THEN 2
WHEN HOUR LIKE '2am' THEN 3
WHEN HOUR LIKE '3am' THEN 4
WHEN HOUR LIKE '4am' THEN 5
WHEN HOUR LIKE '5am' THEN 6
WHEN HOUR LIKE '6am' THEN 7
WHEN HOUR LIKE '7am' THEN 8
WHEN HOUR LIKE '8am' THEN 9
WHEN HOUR LIKE '9am' THEN 10
WHEN HOUR LIKE '10am' THEN 11
WHEN HOUR LIKE '11am' THEN 12
WHEN HOUR LIKE '12pm' THEN 13
WHEN HOUR LIKE '1pm' THEN 14
WHEN HOUR LIKE '2pm' THEN 15
WHEN HOUR LIKE '3pm' THEN 16
WHEN HOUR LIKE '4pm' THEN 17
WHEN HOUR LIKE '5pm' THEN 18
WHEN HOUR LIKE '6pm' THEN 19
WHEN HOUR LIKE '7pm' THEN 20
WHEN HOUR LIKE '8pm' THEN 21
WHEN HOUR LIKE '9pm' THEN 22
WHEN HOUR LIKE '10pm' THEN 23
WHEN HOUR LIKE '11pm' THEN 24
END
對於上下文中,先加入是過濾掉的任務,所以我一下就完成的呼叫。第二次加入是爲了擺脫壞/假帳戶,第三次加入是確保它只從「活動銷售人員」列表中提取姓名。
這裏是什麼我的源數據看起來像一個例子 -
Created By Task Type Time Status Activity ID (Case Safe)
Rudolph Ronald Call 2015-12-21 12:56:00 Completed 61AA
Joey Jalla Call 2015-12-21 12:56:00 Completed 61BB
Mike McCrystal Call 2015-12-21 12:56:00 Completed 61CC
Sally Susie Email 2015-12-21 12:56:00 Open 61DD
Sally Susie Email 2015-12-21 12:56:00 Open 61EE
Sally Susie Meeting 2015-12-21 12:56:00 Completed 61FF
我看起來就像這樣 -
hour calls
2am 5
3am 14
4am 8
5am 20
6am 52
7am 55
8am 145
9am 90
10am 106
11am 93
12pm 96
1pm 53
2pm 54
3pm 43
4pm 20
5pm 8
6pm 4
7pm 17
8pm 9
9pm 12
11pm 6
但我希望它看起來像 -
hour calls
12am 2
1am 4
2am 5
3am 14
4am 8
5am 20
6am 52
7am 55
8am 145
9am 90
10am 106
11am 93
12pm 96
1pm 53
2pm 54
3pm 43
4pm 20
5pm 8
6pm 4
7pm 17
8pm 9
9pm 12
11pm 6
這是寫在MySQL – Sebastian