2010-10-13 38 views
1

我必須找出2小時前創建的記錄數和最近兩個小時創建的記錄數。我發現,使用如何將這兩個sqls合併爲一個?

[在最後兩個小時來產生]

select count(*) 
from trans_calc 
where 
I_TRACKING_CODE = 112 
and d_entered > (current_timestamp - 2 hours) 

[創建兩小時之前]

select count(*) 
from trans_calc 
where 
I_TRACKING_CODE = 112 
and d_entered < (current_timestamp - 2 hours) 

我們可以合併這兩個sql語句或INFACT可以我們寫一個單獨的sql可以給我們所需的輸出?

+2

有一個與你的查詢和下面的解決方案之一的一個基本問題,在創建正是以前不會在所有被計算2小時任何行。 – Allan 2010-10-13 13:16:38

+0

我的版本會抓住他們,因爲它使用ELSE – BradC 2010-10-13 13:22:12

回答

3

試試這個:

SELECT 
    SUM(CASE WHEN d_entered>(current_timestamp-2 hours) THEN 1 ELSE 0 END AS NewerCount 
    ,SUM(CASE WHEN d_entered<=(current_timestamp-2 hours) THEN 1 ELSE 0 END AS OlderCount 
    FROM trans_calc 
    WHERE I_TRACKING_CODE = 112 
+0

我看不到水平滾動條 – 2010-10-13 14:09:03

1

如何

SELECT CASE WHEN (d_entered > (current_timestamp - 2 hrs) 
      THEN 'New' 
      ELSE 'Old' AS AGE 
    , Count(*) as Rows 
from trans_calc 
where I_TRACKING_CODE = 112 
GROUP BY CASE WHEN (d_entered > (current_timestamp - 2 hrs) THEN 'New' ELSE 'Old' 
0
SELECT SUM(lasttwo) AS lasttwo, COUNT(*) - SUM(lasttwo) AS others 
FROM 
(
    SELECT 
     CASE WHEN d_entered > (current_timestamp - 2 hours) THEN 1 ELSE 0 END AS lasttwo 
    FROM 
     trans_calc 
    WHERE 
     I_TRACKING_CODE = 112 
) AS det 
0

是:

在一個

輸出行,

select 
     Sum(Case When d_entered > (current_timestamp - 2 hours) 
      Then 1 Else 0 End) afterCount, 
     Sum(Case When d_entered <= (current_timestamp - 2 hours) 
      Then 1 Else 0 End) beforeCount 
    from trans_calc 
    where I_TRACKING_CODE = 112 

個或在兩個單獨的行作爲BradC以上建議...

+0

您的答案與「KM」相同。英雄所見略同。哈哈 ;) – 2010-10-13 13:47:08

-1
SELECT 
    d_entered > (current_timestamp - 2 hours) AS IsRecent, 
    COUNT(*) 
FROM trans_calc 
WHERE I_TRACKING_CODE = 112 
GROUP BY IsRecent 
相關問題