2016-07-20 13 views
0

während die folgende Abfrage in mssql 2k12 läuft,mssql Abfrage Ausgabetag Bereich

select PROBSUMMARYM1.AFFECTED_ITEM, 
sum(case when SLORESPONSEM1.BREACHED='t' then 1 else 0 end) BREACHED, 
sum(case when SLORESPONSEM1.BREACHED='f' then 1 else 0 end) NOBREACHED, 
SLORESPONSEM1.SLO_ID 
from PROBSUMMARYM1 
INNER JOIN SLORESPONSEM1 
ON NUMBER=FOREIGN_KEY 
where OPEN_TIME>'2014-11-12' 
group by AFFECTED_ITEM,SLO_ID; 

ich die gewünschte Ausgabe zu bekommen, aber wenn ich das Datum in der Linie 8 über einem der folgenden ändern, ich bin nur immer Header & keine Daten, kann jemand vorschlagen, was könnte das Problem sein, die db hat eine gute Menge an Daten für die genannten Zeiträume, das ist sicher und offensichtlich aus einigen fertigen (boxed) Berichte aus der Anwendung mit derselben mssql Instanz

where OPEN_TIME<'2016-05-31' 

oder

where OPEN_TIME<'2016-01-01' 

oder

where OPEN_TIME between '2016-01-01' AND '2016-06-30' 

Danke und Grüße Hemant Vaswani

+0

USE 'CONVERT (DATE, OPEN_TIME, 102)' in where-Klausel –

+1

Was ist der Datentyp von 'OPEN_TIME'? Verwenden Sie nicht "BETWEEN" für Datumsbereichsabfragen und verwenden Sie "yyyymmdd" im Gegensatz zu "yyyy-mm-dd". Aus Gründen siehe http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common.aspx, http://sqlblog.com /blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx und http://blogs.sqlsentry.com/aaronbertrand/backtobasics-dating-responsibly/ . –

+0

Datentyp von 'OPEN_TIME' ist 'Datetime' –

Antwort

0

hoffe, das hilft,

select PROBSUMMARYM1.AFFECTED_ITEM, 
sum(case when SLORESPONSEM1.BREACHED='t' then 1 else 0 end) BREACHED, 
sum(case when SLORESPONSEM1.BREACHED='f' then 1 else 0 end) NOBREACHED, 
SLORESPONSEM1.SLO_ID 
from PROBSUMMARYM1 
INNER JOIN SLORESPONSEM1 
ON NUMBER=FOREIGN_KEY 
where convert(date,OPEN_TIME) between '2014-11-12' And '2016-06-30' 
group by AFFECTED_ITEM,SLO_ID;