SELECT
문을 사용하여 테이블을 계산하려고했습니다.여러 행의 MySQL 조건
--------------------------------------------------------------
AgentID | Date | Incurred | FallOffDate
==============================================================
kegomez | 2012-11-19 | 2.0 | 2013-11-19
kegomez | 2012-11-24 | 0.5 | 2013-11-24
kegomez | 2013-01-21 | 2.0 | 2014-01-21
kegomez | 2013-08-18 | 2.0 | 2014-08-18
내가 선택시에 계산을 할 가능성이 뷰를 만들려고했지만 지금까지 운이 없다 :이 같은 테이블이 있습니다. 결국 테이블은 이렇게 보일 것입니다.
--------------------------------------------------------------
AgentID | Date | Incurred | 90 | 180 | Total | FallOffDate
==============================================================
kegomez | 2012-11-19 | 2.0 | 2.0 | 2.0 | 2.0 | 2013-11-19
kegomez | 2012-11-24 | 0.5 | 0.5 | 0.5 | 2.5 | 2013-11-24
kegomez | 2013-01-21 | 2.0 | 1.0 | 0.0 | 2.5 | 2014-01-21
kegomez | 2013-08-18 | 2.0 | 2.0 | 2.0 | 4.5 | 2014-08-18
전체 열은 값을 계산하기 위해 이전 행의 값을 사용합니다. 예를 들어 행 4의 날짜는 행 3의 날짜를 참조하여 날짜가 더 큰지 확인해야합니다. 하위 쿼리로이 작업을 수행해야합니까? 이것이 결국 작동하게되는 방법은 더 이상 발생하지 않을 경우 에이전트가 90 일에서 최대 180 일마다 1 포인트를 풀어 버리는 것입니다. 따라서 다른 행을 참조해야하는 이유입니다. 이 데이터가 현재 Excel에 있지만 도움이된다면 관리하기에는 너무 커지고 더 나은 성능으로 이동해야합니다.
SELECT mo.AgentID, mo.date,
@r AS 'LAG(date)',
(case when @r<Date then 'YES' when @r is null then 'IS NULL' else 'NO' end) 'Is Bigger',
(@r := Date) AS Date
FROM (
SELECT m.*
FROM (
SELECT @_date = NULL
) variable,
data m
ORDER BY
AgentID
) mo
WHERE (CASE WHEN @_date IS NULL OR @_date <> date THEN @r := NULL ELSE NULL END IS NULL)
AND (@_date := date) IS NOT NULL
당신은을 볼 수
SELECT AgentID, Date, Incurred,
@90 := IF(Date<=CURDATE()-90 AND @r=0, Incurred-1.0, IF(Difference>90, Incurred-1, Incurred)) AS 90Day,
@180 := IF(Date<=CURDATE()-90 AND @r=0, Incurred-1.0, IF(Difference>180, Incurred-2, @90)) AS 180Day,
@Total := IF(@180<0,0,IF(FallOffDate<=CURDATE(),0, @180)) AS Total,
FallOffDate
FROM (SELECT mo.AgentID, mo.Incurred, FallOffDate,
@r AS LEAD_date,
DATEDIFF(@r,Date) AS Difference,
(@r := Date) AS Date
FROM (
SELECT m.*
FROM (
SELECT @_date = NULL
) VARIABLE,
attendance m
ORDER BY
AgentID, Date DESC
) mo
WHERE (CASE WHEN @_date IS NULL OR @_date <> date THEN @r := NULL ELSE NULL END IS NULL)
AND (@_date := date) IS NOT NULL) T
ORDER BY AgentID, Date;
여기가 올바른 방향이라고 생각합니다. 그러나 나는 약간 잘못 계산했다고 생각합니다. 무슨 일이 일어나야 만하는 건데 행 3은 행 4의 날짜 사이의 시간을 계산해야한다는 것입니다. 나는 테스트를 실행했고 훌륭하게 작동하지만 지금은 우리가 그것을 거꾸로 가지고 있다고 생각합니다. –
좋아, 변경 사항을 반영하도록 답변을 업데이트했습니다. –
감사합니다. 큰 도움이되었습니다. –