2016-08-08 32 views
-1

habe ich einen Tisch und es sieht aus wieSQL-Abfrage min (Datum) von einer Spalte und max (Menge) von einer anderen

Table I have

Ich brauche eine Tabelle zu erstellen, die aus den folgenden Spalten bestehen

Table I need

Tabelle enthält eindeutige ID, min Datum, wenn die Anzahl der SMS-max und max Datum war, als die Anzahl der SMS min,

die Zahl der SMS für beide Fälle einschließlich war

Ich habe mehrere Anfragen versucht, aber ich glaube, dass das Problem nicht bei der Suche nach min (sms) in einer Spalte „SMS“ in der Regel aber mit einer Bedingung max (Datum) für die Spalte „Datum“

ist Also, wenn ich die maximale Anzahl an gesendeten SMS auf minimalen Daten finden muss, sollte ich die minimalen Daten auswählen, wenn die Anzahl maximal war. Jetzt kann ich nur die Anzahl der SMS finden, die auf Min-Daten gesendet wurden.

Wird für jede Erklärung

PS froh sein: Ich bin mit MS SQL 2014


+0

ist hier ein toller Ort um anzufangen. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ Und Sie sollten entscheiden, welche DBMS Sie verwenden. mysql <> SQL-Server. –

+0

http://stackoverflow.com/users/3813116/sean-lange Danke! Tabellen die app create kann hier nicht eingefügt werden. Hochgeladene Screenshots –

+0

Es ist wirklich bemerkenswert, einfach zu versuchen zu verstehen, was Sie suchen, ohne einige Datenstrukturen und ein klareres Bild von dem, was Sie eigentlich suchen. Das Herausspringen von Bildern in neue Registerkarten hilft nicht so sehr, als wenn man nur die Daten eingibt. –

Antwort

0

Das sollte oder zumindest Ausgangspunkt abzustimmen arbeiten:

SELECT * INTO Table1 FROM (VALUES 
(1,'1/1/2015',10), 
(1,'2/1/2015',10), 
(1,'3/1/2015',20), 
(1,'4/1/2015',20), 
(2,'5/1/2015',30), 
(2,'6/1/2015',30), 
(2,'7/1/2015',40), 
(2,'8/1/2015',40) 
) as x ([User_ID], [Date], [SMS]) 
GO 
;WITH MX as (
    SELECT t1.[User_ID], MIN(t1.[Date]) as [Date], t1.[SMS] 
    FROM Table1 as t1 
    WHERE t1.[SMS] = (SELECT MAX(i.[SMS]) as [SMS] FROM Table1 as i WHERE i.[User_ID] = t1.[User_ID]) 
    GROUP BY t1.[User_ID], t1.[SMS] 
), MI as (
    SELECT t1.[User_ID], MAX(t1.[Date]) as [Date], t1.[SMS] 
    FROM Table1 as t1 
    WHERE t1.[SMS] = (SELECT MIN(i.[SMS]) as [SMS] FROM Table1 as i WHERE i.[User_ID] = t1.[User_ID]) 
    GROUP BY t1.[User_ID], t1.[SMS] 
) 
SELECT MX.[User_ID], MX.[Date] as Min_Date, MX.[SMS] as Max_SMS, MI.[Date] as Max_Date, MI.[SMS] as Min_SMS 
FROM MX INNER JOIN MI ON MX.[User_ID] = MI.[User_ID]; 
GO