2010-10-13 3 views
1

Je dois trouver le nombre d'enregistrements qui ont été créés avant 2 heures et qui ont été créés au cours des deux dernières heures. Je peux constater que l'aideComment combiner ces deux sqls en un seul?

[créé en deux heures]

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

[créé avant deux heures]

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

Peut-on fusionner ces deux sqls ou enfait peut nous écrivons un seul sql qui peut nous donner la sortie désirée?

+2

Il y a un problème de base avec vos requêtes et une des solutions ci-dessous, en ce que toutes les lignes créées exactement 2 heures précédent ne seront pas comptés du tout. – Allan

+0

Ma version va les attraper, car son utilisation d'un autre – BradC

Répondre

3

essayez ceci:

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

Je ne vois pas les barres de défilement horizontales –

1

Que diriez-vous

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

Oui:

dans une ligne de sortie,

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 

ou sur deux lignes distinctes comme BradC suggérées ci-dessus ...

+0

votre réponse est la même que «KM». Les grands esprits se rencontrent. haha;) –

-1
SELECT 
    d_entered > (current_timestamp - 2 hours) AS IsRecent, 
    COUNT(*) 
FROM trans_calc 
WHERE I_TRACKING_CODE = 112 
GROUP BY IsRecent 
Questions connexes