Just nu i M3-nätverket
Gå till innehåll

Plocka ut första posten baserat på datum och artikel


Markus Ehnberg
 Share

Rekommendera Poster

Markus Ehnberg

Hej,

 

Jag försöker skriva en SQL-sats där jag ska få ut senaste posten i ett register fast per artikel sorterad på datum

 

Databas

Artikelkod                  Datum

A1                               2019-03-27

A1                               2019-03-28

A2                               2018-03-01

 

 

Resultatet jag vill ha är 

Artikelkod                   Datum

A1                                 2019-03-28

A2                                 2018-03-01

 

 

Jag har försökt med Select Top 1 men då får jag bara första posten i databasen. Provat lite med order by och Group by men få inte rätt på det.

Länk till kommentar
Dela på andra webbplatser

Markus Ehnberg
1 timme sedan, skrev Mr Andersson:

Testa:

 

SELECT artikelkod,max(datum)

GROUP BY artikelkod

 

 

Det fungerar fint och får ut de posterna jag vill. Men vill jag lägga ut mer Info från de posterna i databasen så klagar den på det

 

SELECT PUPRHIST.D47501_Artikelkod, MAX(PUPRHIST.D47505_Datum), PUPRHIST.D47513_Gammalt__inkö

 

FROM PYRAMIDTECH.PUPRHIST PUPRHIST

 

WHERE (PUPRHIST.D47509_Ändrade_prise Like '%3%') AND (PUPRHIST.D47502_Typ='A') 

 

GROUP BY PUPRHIST.D47501_Artikelkod

 

 

Får följande fel:

ERROR [42000] [Pervasive][ODBC Client Interface][LNA][Pervasive][ODBC Engine Interface]Column invalid. Must be a group by column: D47513_Gammalt__inkö in SELECT LIST.

 

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

Det blir lite jobbigare, men inte mycket. Jag skriver med generella tabellnamn som du får ersätta med dina.

Observera paranteserna, de är viktiga. Jag har lagt till ett fält 'info' som innehåller extra info som jag läser in med JOIN.

Jag har också förkortat resultatet av max(datum) till dat för att inte förväxla dem.

 

SELECT tbl2.artikelkod , tbl2.dat , tbl3.info FROM (
SELECT artikelkod,max(datum) as dat
FROM tbl
GROUP BY artikelkod) AS tbl2
JOIN tbl AS tbl3 ON tbl2.artikelkod = tbl3.artikelkod AND tbl2.dat = tbl3.datum
 

 

Länk till kommentar
Dela på andra webbplatser

Markus Ehnberg
27 minuter sedan, skrev Mr Andersson:

Det blir lite jobbigare, men inte mycket. Jag skriver med generella tabellnamn som du får ersätta med dina.

Observera paranteserna, de är viktiga. Jag har lagt till ett fält 'info' som innehåller extra info som jag läser in med JOIN.

Jag har också förkortat resultatet av max(datum) till dat för att inte förväxla dem.

 

SELECT tbl2.artikelkod , tbl2.dat , tbl3.info FROM (
SELECT artikelkod,max(datum) as dat
FROM tbl
GROUP BY artikelkod) AS tbl2
JOIN tbl AS tbl3 ON tbl2.artikelkod = tbl3.artikelkod AND tbl2.dat = tbl3.datum
 

 

 

Vet inte om vi missförstod varande eller jag som inte förstår. Men allting är från samma register. Tolkar det som när du skriver tbl2 och tbl3 så är det från olika register. Min register heter bara PUPRHIST. Jag ska testa din lösning

 

tusentack för hjälpen.

 

Länk till kommentar
Dela på andra webbplatser

Mr Andersson

Det är samma tabell (tbl), men man måste ge dem olika alias för att kunna referera till rätt uppsättning data. 

Tbl2 innehåller det du fråga om från början och tbl3 innehåller det extra material som du frågade om senare. 

 

Du ser det riktiga tabellnamnet direkt efter FROM respektive JOIN 

 

Länk till kommentar
Dela på andra webbplatser

 Share

×
×
  • Skapa nytt...