2016-09-14 1 views
0

Ich verwende die Grafikberichte für die Auswahl unten. Die MySQL-Datenbank hat nur die aktiven Datensätze in der Datenbank. Wenn also keine Datensätze von X Stunden bis Y Stunden in der Datenbank sind, gibt diese Auswahl nichts zurück. Also in meinem Fall, ich brauche, wählen Sie die Rückkehr Paypal Null-Werte als auch die keine Aktivität in der Datenbank war. Und ich verstehe nicht, wie man die UNION Funktion verwendet oder neu erstellt, um die Nullwerte zu erhalten, wenn nichts in der Datenbank im Zeitintervall aufgezeichnet wurde. Kannst du bitte helfen?Wie gibt man Nullwerte zurück, wenn im Zeitintervall nichts geschrieben wurde?

select STR_TO_DATE (DATE_FORMAT(`acctstarttime`,'%y-%m-%d %H'),'%y-%m-%d %H') 
as '#date', count(*) as `Active Paid Accounts` 
from radacct_history where `paymentmethod` = 'PayPal' 
group by DATE_FORMAT(`#date`,'%y-%m-%d %H') 

Wenn ich die wählen die Ausgabe ausgeführt ist:

Current Output

Aber ich brauche, wenn es keine Werte zwischen 2016.07.27 07.00.00 und 2016.07.28 sind 11.00.00, dann in jeder Stunde sollte es zeigen Null aktiven Konten wie folgt aus:

Needed output with no values every hour

ich so erstellt haben unten wählen, aber es ist nicht setze zu jeder Stunde den Nullwert wie ich brauche. die große Lücke zwischen dem 12 Sep und 13 Sep sowieso, aber es sollte die Nullwerte jede Stunde sein

(wählen Sie STR_TO_DATE (DATE_FORMAT (acctstarttime, '% y-% m-% d% H'), '% y-% m-% d% H ') als '#date', count (paymentmethod) als Active Paid Accounts
von radacct_history wo paymentmethod <> '' Gruppe von DATE_FORMAT (#date,' PayPal% y-% m-% d% H ')) union ALL (wählen Sie STR_TO_DATE (DATUM_FORMAT (acctstarttime,'% y-% m-% d% H '),'% y-% m-% d% H ') als' #date ‘, 0 als Active Paid Accounts
von radacct_histo ry wo paymentmethod <> Gruppe 'PayPal' von DATE_FORMAT (#date, '% y-% m-% d% H'));

+1

Beispieldaten und gewünschte Ausgabe wird sehr hilfreich sein, um die entsprechende Antwort bald zu bekommen. – Susang

+0

Ich habe Ausgänge in meiner Antwort hochgeladen. Danke –

Antwort

1

Ich denke, Sie möchten 0 zurück, wenn keine passenden Datensätze in MySQL ist. Hier ein Beispiel:

(SELECT Col1,Col2,Col3 FROM ExampleTable WHERE ID='1234') 
UNION (SELECT 'Def Val' AS Col1,'none' AS Col2,'' AS Col3) LIMIT 1; 

die Post aktualisiert: Sie versuchen, Daten abzurufen, die nicht in der Tabelle vorhanden ist, ich denke, in Bezug auf den Ausgang zur Verfügung gestellt. In diesem Fall müssen Sie eine Datumstabelle pflegen, um das Datum anzuzeigen, das nicht in der Tabelle enthalten ist. Bitte beachten Sie dies und es ist etwas schwierig - SQL query that returns all dates not used in a table

+0

Danke, aber dieses Beispiel gibt keine Nullen zurück –

+0

Bitte überprüfen Sie den Link Ich hoffe, es wird Ihnen helfen, zu verstehen. –

0

Sie benötigen eine künstliche Tabelle mit allen notwendigen Zeitintervallen. Z.B. Wenn Sie tägliche Daten benötigen, erstellen Sie eine Tabelle und fügen Sie alle Tagesdaten hinzu, z. Start von 1970 bis 2100.

Dann können Sie die Tabelle verwenden, und LEFT Ihre radacct_history JOIN. Also für jedes gewünschte Intervall haben Sie Gruppe Artikel (Gruppe von sollte auf der Intervalltabelle basieren.