2012-01-06 7 views
2

とにかく私はこの声明を小さくすることができますか?効率化のために、全体のアイデアは 今日、今月と最後の月の "引用符"の量を得ることです。とにかく連合声明を小さくするには?

SELECT COUNT(QuoteDate) AS today 
    FROM database 
    WHERE QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) 

    UNION 

    SELECT COUNT(QuoteDate) AS this_month 
    FROM database 
    WHERE QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) 

    UNION 

    SELECT COUNT(QuoteDate) AS last_month 
    FROM database 
    WHERE QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH) 

おかげ

答えて

3

あなただけのORステートメントを使用することができませんでしたか?

SELECT COUNT(QuoteDate) AS today FROM database 
    WHERE 
    QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY) 
    OR 
    QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) 
    OR 
    QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH) 
+0

これは、最初の2つの句が常に真であるため、3つ目の句が常に真であるため、最後の2か月の引用符の数だけを返します。 –

1

未テスト:

SELECT 
    sum(if(quotedate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY), 1, 0)) AS today, 
    sum(if(quotedate >= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), 1, 0)) AS this_month, 
    sum(if(quotedate <= DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH), 1, 0)) AS last_month 
FROM database 
WHERE QuoteDate >= DATE_SUB(CURRENT_DATE(), INTERVAL 2 MONTH) 

は、アイデアは、フィールド句にWHERE句での選択を移動し、そこに計算を行うことです。

1ヵ月以上経過したエントリのみが必要な場合があるため、3番目の句は逆になります。

関連する問題