verwendetes Datenbanksystem: <Sql Express 2005>
Hallo zusammen,
ich habe ein kleines Problem mit Linq, wobei das Problem eher bei mir als bei Linq liegt =)
Ich habe ein Tabelle mit den folgenden Spalten (id, name, value, timestamp)
So, jetzt möchte ich über eine Abfrage immer den aktuellsten Wert von jedem Kanal (Name) kriegen.
Wenn ich also z.B. diese Daten habe
id - name - value - timestamp
1 - Test - 22 - 22.07.2008 11:11
2 - Test - 55 - 23.07.2008 12:12
3 - Test2 - 09 - 09.08.2008 14:12
4 - Test2 - 11 - 08.09.2008 23:23
5 - Test - 33 - 28.07.2008 20:20
Als Ergebnis möchte ich dann von jeden Namen nur den neuesten Wert kriegen.
Das Ergebnis bei diesem Beispiel wäre dann:
5 - Test - 33 - 28.07.2008 20:20
4 - Test2 - 11 - 08.09.2008 23:23
Habe da jetzt schon so einiges versucht, aber bin noch nicht ans Ziel gekommen:
var result = from row in ctx.daten_online_trend
group row by row.name
into grp
select grp.First();
Vielen Dank für eure Hilfe 😉
Gruss
Michael
Ich mach kein Linq, aber die max Funktionalität sollte dir weiterhelfen.
http://msdn.microsoft.com/en-us/vcsharp/aa336747.aspx#maxGrouped
Brauchst sicher sowas wie
//pseudo
from x in ctx.daten_online_trend
group x by x.name into g
select g.Group.Max(x => x.timestamp);
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Hi,
danke.
Jetzt bin ich dem Ziel schon viel näher gekommen.
Ich habe das jetzt so umgeändert.
var result = from row in ctx.daten_online_trend
group row by row.name.ToString()
into grp
select new { name = grp.Key, timestamp = grp.Max(row=>row.timestamp) };
Soweit passt alles. Ich bekomme den Namen und den Timestamp. Ich brauche aber auch den dazugehörigen Wert. Wie kann ich diesen rankommen?
Gruss
Michael
var result = from row in ctx.daten_online_trend
group row by row.name.ToString()
into grp
select new { name = grp.Key, timestamp = grp.Max(row=>row.timestamp), value = grp.Value};
So sollte es doch gehen, oder nicht?
Hi
So sollte es doch gehen, oder nicht?
Nö, das funzt nicht.
Gruss
Michael
Probier mal, vielleicht klappts
var result = from row in ctx.daten_online_trend
group row by row.name.ToString()
into grp
from newest = grp.Max(row=>row.timestamp)
select grp.Where(row => row.timestamp == newest);
Ich kann das hier nicht testen, alles nur Vermutungen
Shift to the left, shift to the right!
Pop up, push down, byte, byte, byte!
YARRRRRR!
Vielen Dank für eure Hilfe
Ich habe das Ganze jetzt so gelöst
var result = from row in ctx.daten_online_trend
orderby row.timestamp descending
group row by row.name.ToString()
into grp
select grp.First();
Gruss
Michael