문제

"날짜" 열이 있는 테이블이 있습니다.각 날짜는 여러 번 나타날 수 있습니다.k번 미만으로 나타나는 날짜만 선택하려면 어떻게 해야 합니까?

도움이 되었습니까?

해결책

select dates 
  from table t 
 group by dates having count(dates) < k ;

다행히 ORACLE에서는 작동합니다.HTH

다른 팁

SELECT * FROM [MyTable] WHERE [Date] IN
(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
)

@[SQLMenace]의 응답도 참조하세요.이는 이와 매우 유사하지만 최적화 프로그램이 차이를 문제 삼지 않는다고 가정하면 데이터베이스에 따라 JOIN이 더 빠르게 실행될 것입니다.

COUNT 집계를 사용하십시오.

SELECT Date
FROM SomeTable
GROUP BY Date
HAVING COUNT(*) < @k

DECLARE @Max int
SELECT @Max =  5

SELECT t1.* 
FROM [MyTable] t1 
JOIN(
    SELECT [Date] 
    FROM [MyTable] 
    GROUP By [Date] 
    HAVING COUNT(*) < @Max
) t2 on t1.[Date]  = t2.[Date] 

"x회 표시" 쿼리의 경우 HAVING 절을 사용하는 것이 가장 좋습니다.귀하의 경우 쿼리는 다음과 같습니다.

SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k

또는 날짜를 제외한 다른 열을 선택해야 합니다.

SELECT * FROM Table WHERE Date IN (
SELECT Date FROM table GROUP BY Date HAVING COUNT(*)<k)

IN을 INNER JOIN으로 다시 작성할 수도 있지만 실제로 대부분의 RDBMS에서 쿼리 최적화 프로그램이 이 작업을 수행하므로 성능이 향상되지는 않습니다.날짜에 대한 인덱스가 있으면 이 쿼리의 성능이 확실히 향상됩니다.

SELECT date, COUNT(date)
FROM table
GROUP BY date
HAVING COUNT(date) < k

그런 다음 원본 데이터를 다시 가져오려면 다음을 수행하세요.

SELECT table.*
FROM table
INNER JOIN (
  SELECT date, COUNT(date) 
  FROM table
  GROUP BY date
  HAVING COUNT(date) < k) dates ON table.date = dates.date

Oracle을 사용한다고 가정하고 k = 5:-

select date_col,count(*)
from your_table
group by date_col
having count(*) < 5;

날짜 열에 시간도 채워져 있고 이를 무시하려면 다음과 같이 쿼리를 수정하세요.

select trunc(date_col) as date_col,count(*)
from your_table
group by trunc(date_col)
having count(*) < 5;

날짜에 시간이 포함된 경우 날짜 필드에서 직접 계산하지 못할 수도 있습니다.먼저 연/월/일 형식으로 변환한 다음 그에 따라 계산해야 할 수도 있습니다.

그렇지 않으면 일반적으로 정확히 동일한 시간의 기록이 거의 없기 때문에 카운트가 무효화됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top