2014-02-14 69 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)索引使用速度更快。因人而異。

分享和享受。

+0

+1內衣大聲笑(順便說一句,我碰巧認爲簡短的教條點) – Bohemian

+1

「簡潔是內衣的靈魂」 - [多蘿西帕克](http://www.goodreads。 COM /作家/報價/ 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'。 –