반응형
이에 사용할 수 없는 구역.
데이터를 어떤 열에도 중복되지 않고 표시하고 싶습니다.
구분 또는 그룹별로 사용하고 있지만 작동하지 않습니다.
my sql :
SELECT DISTINCT rl.NIK,date(rl.enroll),LEFT(TIME(rl.enroll),8) AS time
FROM RTattandenceLog rl, mstEmp e
WHERE DATE(rl.enroll)=CURDATE()-1 AND e.idDept=3 AND e.NIK=rl.NIK
교차한 선이 표시되지 않아야 합니다.
기본적으로 다음을 사용하여 집계 쿼리를 수행합니다.JOIN
다음을 사용하는 대신 날짜/시간을 두 개의 열로 구분하는 이유를 잘 모르겠습니다.
SELECT rl.NIK, DATE(rl.enroll),
CAST(MIN(TIME(rl.enroll)) as CHAR)
FROM RTattandenceLog rl JOIN
mstEmp e
ON e.NIK = rl.NIK
WHERE rl.enroll < CURDATE() AND
rl.enroll >= CURDATE() - INTERVAL 1 DAY AND
e.idDept = 3
GROUP BY rl.NIK, DATE(rl.enroll);
주의:
- 이것은 적절하고, 명시적이며, 표준적이고, 읽기 쉬운 것을 사용합니다.
JOIN
통사론에서 쉼표를 사용하지 않음FROM
절 - 비교가 사용되지 않는 날짜
DATE()
따라서 인덱스와의 호환성이 향상되고 최적화 도구에 도움이 됩니다. - 의 암묵적인 변환은 없습니다.
time
값을 매겨 문자열로 만듭니다.왜 시간이 충분하지 않은지 모르겠어요 (date
있는 것처럼 보임). 그러나 이것은 명시적으로 문자열로 변환됩니다.암시적 변환은 의미 오류와 성능 문제의 원인입니다.
저는 당신이 왜 날짜와 시간을 별도의 열로 나누려고 하는지 이해할 수 없습니다.이 정도면 충분할 것입니다.
SELECT rl.NIK, MIN(rl.enroll)
FROM RTattandenceLog rl JOIN
mstEmp e
ON e.NIK = rl.NIK
WHERE rl.enroll < CURDATE() AND
rl.enroll >= CURDATE() - INTERVAL 1 DAY AND
e.idDept = 3
GROUP BY rl.NIK, DATE(rl.enroll);
실제로 NIK와 등록 날짜를 기준으로 여기에 그룹을 만들고 싶지 않습니까?그리고 모든 그룹의 가장 빠른 시간을 보여줍니까?
이와 같은 것:
SELECT rl.NIK, date(rl.enroll), LEFT(TIME(MIN(rl.enroll)), 8) AS time
FROM RTattandenceLog rl, mstEmp e
WHERE DATE(rl.enroll) = CURDATE() - 1 AND e.idDept = 3 AND e.NIK = rl.NIK
GROUP BY rl.NIK, date(rl.enroll)
저는 MariaDB를 직접 사용하지 않기 때문에 테스트할 수 없습니다.하지만 이것은 꽤 표준적인 SQL 구문이기 때문에 작동해야 한다고 생각합니다.
언급URL : https://stackoverflow.com/questions/67598298/distict-cant-use-in-this
반응형
'programing' 카테고리의 다른 글
요소별 행렬 곱셈(하다마드 제품)을 numpy로 얻는 방법은 무엇입니까? (0) | 2023.06.23 |
---|---|
invoke-customs는 Android 0 --min-api 26부터만 지원됩니다. (0) | 2023.06.23 |
구성된 ObjectMapper가 spring-boot-webflux에서 사용되지 않음 (0) | 2023.06.23 |
SQL 형식 표준 (0) | 2023.06.23 |
클래스 탐색기 없이 속성 맵에 속성을 추가하는 방법은 무엇입니까? (0) | 2023.06.23 |