2014-02-14 3 views

답변

6

브리 비티는 위트 (및 란제리)의 영혼이지만 명확성은 코드의 영혼입니다. 시도 :

SELECT COUNT(DISTINCT USERNAME) 
    FROM T_LOGGINGINFO 
    WHERE LOGINTIME BETWEEN TO_DATE('01-MAY-2012 00:00:00', 'DD-MON-YYYY HH24:MI:SS') 
         AND TO_DATE('31-MAY-2012 23:59:59', 'DD-MON-YYYY HH24:MI:SS') 

선명 IMO, 아마 빨리 TO_CHAR 테이블의 모든 행에 대해 실행 할 필요가 없습니다, 그리고 잠재적으로 사용할 수 (LOGINTIME, USERNAME)에 인덱스를 수있다. YMMV.

공유하고 즐기십시오.

+0

+1 란제리 롤 (btw 나는 교리의 요점을 너무 간략하게 구독하는 일이) – Bohemian

+1

"간결은 란제리의 영혼입니다"- [도로시 파커] (http : //www.goodreads. com/author/quotes/24956.Dorothy_Parker) –

3
select COUNT(DISTINCT USERNAME) 
    from T_LOGGINGINFO 
    where to_char(LOGINTIME,'YYYY-MM')='2012-05' 

참고 사항 : 당신이 특정 기능 인덱스가 없다면 to_char(LOGINTIME,'YYYY-MM')LOGINTIME 컬럼에 인덱스를 사용하여 허용하지 않습니다.

+0

색인 문제를 고려할 때 대신'YEAR (LOGINTIME) = 2012' 및'MONTH (LOGINTIME) = 5'를 사용하는 것이 더 좋을까요? – Nizam

+0

@ Nizam : 생성 된 색인에 따라 달라집니다 – zerkms

+1

이 작업은'username'이 결코'NULL'이 아니라고 가정합니다. –

관련 문제