2016-05-04 5 views
0

Ich habe Datensätze im DYYMMDD FormatLesen Sie die aktuelle Datenmenge mithilfe von SQL oder sas

D160102 
D160128 
D160227 
D160328 
D160430 

Wie kann ich die aktuelle Datenmenge auf monatlicher Basis zu lesen. Sagen wir, es gibt zwei Datensätze im Januar Monat (D160102, D160128), ich möchte nur die D160128 lesen und nicht die andere. Wie ?? Irgendeine Hilfe ?

+0

warum Sie das nicht als Datum anstelle von Text speichern? Dinge wären viel einfacher –

+0

das ist, wie es in der Firma ist –

+0

Wer auch immer diese Datenbank entworfen hat, sollte streng geschlagen werden. –

Antwort

0

Unter der Annahme, es in der Tabelle als String, Sie String verwenden könnte nur der Monatswert

Select * from (
Select 
    Field 
    ,SUBSTRING(Field, 3, 2) as 'Month' 
    ,ROW_NUMBER() over (partition by SUBSTRING(Field, 3, 2) order by Field DESC) as 'frnk' 
) a 
Where a.frnk = 1 
+0

Sie brauchen extrahieren 'YYMM' nicht nur' MM' –

0

Nicht sicher SAS zu extrahieren, aber dies ist für MySQL, ist die Idee, Gruppe zusammen alle String mit gleichen Monat DYYMM und den größeren bekommen.

SQL Demo

SELECT MAX(dday) 
FROM Table1 
GROUP BY SUBSTRING(dday,2,4) 

OUTPUT

| MAX(dday) | 
|-----------| 
| D160128 | 
| D160227 | 
| D160328 | 
| D160430 | 
+0

Vielen Dank Juan Carlos, aber es ist ein Tabellenname, dass ich die neueste und nicht das Datumsfeld in der Spalte wählen muss, entschuldigt, wenn Ich missverstanden –

+0

Ich verstehe. Also ist SAS wie SQL Server? Weil es Funktionen gibt, um den Namen aller Tabellen in einer Datenbank zu erhalten. Ersetzen Sie in diesem Fall "Table1" für eine Unterabfrage, die das gesamte Dataset zurückgibt. –

+0

sas ist SQL ähnlich, Datasets sind Tabellen und Bibliotheken sind Schemas. –

0

Eine SAS-Daten Schritt-Lösung. Lies das Datum als yymmdd ein und gebe es dann als yymm6 zurück, so dass es nach Datum absteigend sortiert und nur das erste pro Gruppe nimmt.

data have; 
input files $; 
cards; 
D160102 
D160128 
D160227 
D160328 
D160430 
; 
run; 

data want; 
set have; 
date=put(input(substr(files, 2), yymmdd.), yymmn6.); 
run; 

proc sort data=want nodupkey; 
by descending date; 
run; 
0

So das Finden der neuesten ist einfach, wie andere gezeigt haben. Aber um es dann im Rest Ihres Programms zu verwenden, müssen Sie eine Technik zur Codegenerierung verwenden. Wie eine Makrovariable.

Unter der Annahme, dass Ihre Liste SAS-Datasets darstellt, könnte so etwas verwendet werden, um sie zu einem einzigen Dataset zu kombinieren.

data have; input dsname $ ; 
cards; 
D160102 
D160128 
D160227 
D160328 
D160430 
;;;; 

proc sql noprint ; 
    select dsname into :dslist separated by ' ' 
    from have 
    group by substr(dsname,2,4) 
    having dsname = max(dsname) 
    ; 
quit; 

data want ; 
    set &dslist ; 
run; 
Verwandte Themen