2016-08-01 11 views
1

Ich versuche, eine Abfrage zu schreiben, um die Verwendung von PC-Terminals zu verfolgen. Ich möchte alle PC-Terminals zeigen, die seit 1 Jahr nicht mehr aktiv waren. Dies ist die Abfrage, die ich versuche zu verwenden, und es gibt 0 Ergebnisse zurück, obwohl ich weiß, dass ich Terminals habe, die nicht verwendet wurden. Die Termine sind in als Datum/Zeit-Formate (2016.06.22 14: 38: 12,000)Ich versuche eine Abfrage zu schreiben, um die Verwendung von Terminals zu verfolgen. Ich möchte alle Terminals zeigen, die seit 1 Jahr keine Aktivität hatten

select distinct 
    t.Terminalid, 
    t.TerminalName 
from 
    Terminal as t 
Inner Join 
    Pos_Payments as p 
    on p.TerminalId = t.TerminalId 
where 
    TransactionDateTime < '7/29/2015' and TransactionDateTime !> '7/30/2015' 
order by t.TerminalID 
+1

'>' Sie sollten schauen an diesem ... – scsimon

+0

Würden Sie in Ihrer Frage das Schema für diese Tabellen bearbeiten? In welchem ​​Format sind insbesondere Ihre Daten - Strings, Daten oder Termine? – halfer

+0

Ich nehme an, '!>' Soll "nicht größer als" bedeuten - weißt du das funktioniert? Ich nehme an, dass es besser wäre, '<=' stattdessen zu verwenden, d. H. "Kleiner als oder gleich", aber ich weiß nicht, ob das hier gemeint ist. – halfer

Antwort

2

Verwenden group by und max():

select t.Terminalid, t.TerminalName 
from Terminal t Inner Join 
    Pos_Payments p 
    on p.TerminalId = t.TerminalId 
group by t.Terminalid, t.TerminalName 
having max(TransactionDateTime) < '2015-07-29' 
order by t.TerminalID ; 

Beachten Sie die Verwendung der ISO-Norm YYYY-MM -DD ​​Datumsformat.

Wenn Sie dies wollen, basierend auf dem aktuellen Datum:

having max(TransactionDateTime) < dateadd(year, -1, getdate()) 

(. Und Sie könnten das zu date, um loszuwerden, die Zeitkomponente werfen wollen)

+1

Vielen Dank. Das gibt mir genau das, wonach ich gesucht habe. – SHill