내가 가진이 내가 용액에 루프 구멍을 발견 SQLFIDDLE다른 날짜로하지만 같은 속성을 가진 두 개의 행을 병합
USER_NAME| ENTRY_DATE | TIMEIN | TIMEOUT
User1 | 28-JUL-13 | 16:40:40 | 16:42:30
User2 | 28-JUL-13 | 16:41:13 | 16:41:15
하지만 출력을입니다
SELECT te.user_name, LEFT(te.entry_datetime, 10) AS entry_date, cin.entry_datetime AS timein, cout.entry_datetime AS timeout
FROM time_entries te
LEFT JOIN (SELECT user_name, LEFT(entry_datetime, 10) AS entry_date, MIN(entry_datetime) AS entry_datetime
FROM time_entries
WHERE entry_type = 'Time In'
GROUP BY user_name, entry_date
) cin ON cin.user_name = te.user_name AND cin.entry_date = LEFT(te.entry_datetime, 10)
LEFT JOIN (SELECT user_name, LEFT(entry_datetime, 10) AS entry_date, MAX(entry_datetime) AS entry_datetime
FROM time_entries
WHERE entry_type = 'Time Out'
GROUP BY user_name, entry_date
) cout ON cout.user_name = te.user_name AND cout.entry_date = LEFT(te.entry_datetime, 10)
GROUP BY te.user_name, entry_date;
이 쿼리, 자신의 일부 다음날 밤새 근무하고 시간 초과 근무를하는 직원. 따라서 사용자가 2013 년 7 월 28 일에 시간 제한을 설정하고 2013 년 7 월 29 일에 시간 제한을 설정하면이 값이 출력됩니다. SQLFIDDLE
USER_NAME| ENTRY_DATE | TIMEIN | TIMEOUT
User1 | 28-JUL-13 | 16:40:40 | null
User1 | 29-JUL-13 | null | 16:42:30
User2 | 28-JUL-13 | 16:41:13 | 16:41:15
논리가 맞다하지만 내 경우에는 appriate없는 것 같다. 난 그냥 작업을 쉽게 ENTRY_DATE 제거하고 단지 3 열 USER_NAME, TIMEIN 및 TIMEOUT을 가지고 생각하고있어. 이 같은.
USER_NAME | TIMEIN | TIMEOUT
User1 | 28-JUL-13 16:40:40 | 29-JUL-13 16:42:30
User2 | 28-JUL-13 16:41:13 | 28-JUL-13 16:41:15
변경 사항이나 새로운 솔루션을 제안 할 사람이 있습니까? 감사.
이 방법이 효과가있을 수 있지만 디자인보다는 운이 그렇게 두려워요. 해결책으로 사용해서는 안됩니다. – Strawberry
글쎄, 내가 이해하기 때문에 나는 단지 SQL의 초보자입니다. 나는 방금 배우기 시작했으며 아직 잘 디자인되지 않았습니다. 하지만 그 사실을 시도하고 그것을하기 위해 최선을 다했고 다른 사람들의 대답에 의존하지 않았습니다. 이것이 최선의 해결책이 아닐 수도 있지만 그것이 내 요구를 충족시키기 때문에 좋습니다. 오히려 좋은 디자인으로 답을 얻기를 기다리는 것보다. – bot
어, 어쨌든 ... – Strawberry