하나의 행에서 생성 타임 스탬프를 사용하고 첫 번째 타임 스탬프를 기준으로 INTERVAL에서 '수정'타임 스탬프를 기준으로 고유 사용자 수를 계산하는 쿼리를 작성하려고합니다. 나는 출력을 얻지 만, 그것이 내가 기대하는 바가 아니다.다른 행을 참조하는 MySQL 쿼리
GROUP BY 또는 DATE_SUB 때문에 내가 할 수있는 일이 불가능하다는 느낌이 들었습니다. 이것은 내가 무엇을의 골격이다 :
이 쿼리의 목적은 작업 A에 대해, 나는 시간에 제작 한 그 일을보고, 활성 얼마나 많은 사용자 (노동자) 셀 수 있도록이다
SELECT jobid, ctime, date, foo.count
FROM Table foo
JOIN (
SELECT
COUNT(DISTINCT user) AS count
FROM Table
WHERE mtime >= DATE_SUB(ctime, INTERVAL 12 HOUR)
GROUP BY window
) bar ON foo.id = bar.id
ORDER BY ctime
지난 12 시간 동안 얼마나 많은 사람들이 그 기간에 다른 일자리를 '수정'했는지에 따라 이 같은 테이블 그러니까 기본적으로
:
jobid ctime date foo.count
2 10:00 AM 1st 1
3 1:00 PM 2nd 0
4 9:00 AM 3rd 1
5 10:00 AM 3rd 2
내 쿼리 바른 길에 나는 건가요 :
는
jobid userid ctime mtime date
1 Alan 9:00 AM 11:00 AM 1st
2 Bob 10:00 AM 1:00 PM 1st
3 Carla 1:00 PM 11:00 PM 2nd
4 Dave 9:00 AM 10:00 AM 3rd
5 Emma 11:00 AM 1:00 PM 3rd
내 원하는 출력이 될 것이다? 아니면 내가 떠난거야?
는 편집 :
SELECT
ci.ctime AS "Job Creation Time",
ci.job_id AS "Job ID",
ci.pickup_time AS "Pickup Time",
HOUR(wt.ctime) AS "Active Window",
xx.Active AS "#Active in Window"
FROM worker_to AS wt
JOIN stats_ci_data ci ON ci.job_id = wt.id
JOIN `order` o ON o.id = wt.order_id
JOIN (
SELECT
wt.id AS `id`, wt.ctime,
DATE(wt.ctime) AS `date`,
DATE_FORMAT(wt.ctime, '%m-%d-%H') AS win,
COUNT(DISTINCT wt.worker_id) AS "Active"
FROM worker_to wt
JOIN `order` o ON o.id = wt.order_id
WHERE wt.mtime BETWEEN DATE_SUB(wt.ctime, INTERVAL 12 HOUR) AND wt.ctime
AND wt.tier != "machine"
AND wt.preferred_worker_flag != '1'
AND o.source LIKE '%Mozilla%'
OR o.source LIKE 'Opera%'
OR o.source LIKE 'Firefox%'
GROUP BY win
) xx ON xx.id = wt.id
WHERE wt.tier != "machine"
AND wt.preferred_worker_flag != "1"
AND o.source LIKE '%Mozilla%'
OR o.source LIKE 'Opera%'
OR o.source LIKE 'Firefox%'
ORDER BY ci.ctime, HOUR(wt.mtime)
;
그래서 내가 대신 내가 계층, preferred_worker, 소스처럼, '필터'의 무리에 넣어해야하기 때문에 두 번 같은 테이블에서 당겨 조인 사용. 나는 이것들이 질의를 늦추고 있다고 생각한다. 그러나 동시에, 나는 시간 간격이 나에게 맞는 숫자도주지 못한다고 느낀다. 현재 하위 쿼리 그룹은 DATE
개이지만 활성 직원 수는 1, 2, 3 일로 매우 낮습니다.
안녕하세요, David 님, 답장을 보내 주셔서 감사합니다. 네,'ctime'과'mtime' 둘 다 날짜와 시간이 있습니다. 나는'and this.userid! = ... '가 내가 찾고있는 것이라고 생각하지 않지만'BETWEEN' 연산자를 사용하려고합니다. 내가 얻는 숫자는 바뀌지 않는 것 같습니다. 나는 내일 전체 질의를 게시 할 것이며, 성취하고자하는 것을 더 잘 전달할 수 있기를 희망한다. – Murmur