gs-500.de  

Zurück   gs-500.de > Fun, Offtopic, etc. > Computer, Handy, Technik, ...

Hinweise

Antwort
 
Themen-Optionen
Alt 01.06.2007, 11:29:04   #1
Sumpfmensch
Erfahrener Benutzer
 
Benutzerbild von Sumpfmensch
 
Registriert seit: 05.09.2006
Ort: Würselen
Beiträge: 246
Standard SQL - Frage

Hey Leute,
da ich gelesen hab, dass ja auch ein paar weitere Informatiker unter euch weilen stell ich einfach mal ne Frage nach ner Query, die ich mit meiner bisherigen ERfahrung leider noch nicht erstellen kann

Aaaalso ...
ich habe folgende Tabelle:
Code:
----------------------------------------
|  id  |   name  | gueltig_ab   | preis |
----------------------------------------
|   1  |    nr 1  | 01.01.07   |    10  |
----------------------------------------
|   2  |    nr 2  | 02.01.07   |    12  |
----------------------------------------
|   3  |    nr 3  | 01.01.07   |    10  |
----------------------------------------
|   4  |    nr 1  | 23.04.07   |    20  |
----------------------------------------
Das Problem ist jetzt, dass ich nur die aktuellen preise für die produkte (unter name) haben möchte

name ist jetzt in dem beispiel eindeutig (in wirklichkeit ist das ein primärschlüssel einer anderen tabelle, tut hier ja aber nichts zur sache)

ich hab schon ne lösung mit einer oder zwei (weiß ich grad nicht) inneren abfragen, aber die ist extrem lang und umständlich, aber es muss ja irgendwie besser gehen.

ich denke, dass ich nicht drauf komme, liegt an meiner fehlenden erfahrung bezüglich group by und den aggregatfunktionen

und jetzt leute, haut rein

ich hab jetzt schon stundenlang rumgegrübelt, mir fällt aber nix ein ...

danke schon mal
Sumpfmensch ist offline   Mit Zitat antworten
Alt 01.06.2007, 12:22:00   #2
jussen
Gast
 
Beiträge: n/a
Standard

hmm ... musst nen bisl probiern aber ich geb ma hier nen paar denkanstöße wies funktionieren könnte.
Evtl. unterstützt date die max funktion. Einfach wäre beispielsweise

Code:
SELECT * FROM Tabelle 
WHERE name = (SELECT name FROM Tabelle WHERE gueltig_ab = 
(SELECT MAX(gueltig_ab) FROM Tabelle)

coolere lösung auf die schnelle wüsst ich auch nich. ich denke du wirst es nicht mit einem nicht-verschalteltem statement hinbekommen.
  Mit Zitat antworten
Alt 01.06.2007, 13:48:20   #3
verdi
Administrator
 
Benutzerbild von verdi
 
Registriert seit: 15.05.2002
Ort: Hamburg
Alter: 43
Beiträge: 9.038
Baujahr: 1994
Kilometer: 45000
Standard

@jussen: wenn du schon verschachtelst dann kannste auch einfach in der inneren nen order by datum DESC limit 0,1 machen ...
__________________
When I get sad, I stop being sad and be awesome again. True story.
verdi ist offline   Mit Zitat antworten
Alt 01.06.2007, 16:50:35   #4
Sumpfmensch
Erfahrener Benutzer
 
Benutzerbild von Sumpfmensch
 
Registriert seit: 05.09.2006
Ort: Würselen
Beiträge: 246
Standard

Zitat:
Zitat von jussen
hmm ... musst nen bisl probiern aber ich geb ma hier nen paar denkanstöße wies funktionieren könnte.
Evtl. unterstützt date die max funktion. Einfach wäre beispielsweise

Code:
SELECT * FROM Tabelle 
WHERE name = (SELECT name FROM Tabelle WHERE gueltig_ab = 
(SELECT MAX(gueltig_ab) FROM Tabelle)

coolere lösung auf die schnelle wüsst ich auch nich. ich denke du wirst es nicht mit einem nicht-verschalteltem statement hinbekommen.
Bei der Lösung kommt aber was ganz andres raus.
Du stellst als Bedingung, dass der name = dem namen ist, dessen gueltig ab genauso groß wie das größte gueltig ab der tabelle ist.
das heißt, du bekommst den ersten und den letzten datensatz zurück, da dort der name nr 1 ist, welcher an der vierten stelle den größten wert bei gueltig ab hat.

ich hab jetzt meine lösung mal auf die beispieltabelle übertragen und schon sieht sie gar nicht mehr sooooo kompliziert aus.

Code:
 SELECT * FROM tbl_test as t1
WHERE gueltig_ab = 
  (SELECT max(gueltig_ab) 
   FROM tbl_test as t2
   WHERE t2.name = t1.name)
ein einfacher join ist ja ok ... mein prob ist nur, dass diese beispieltabelle (tbl_test) in wirklichkeit schon aus drei tabellen besteht!

und da das innere SELECT ja für jede spalte einzeln nochmal ausgeführt wird, wird das bei ca 2000 datensätzen in einer, 5000 in der zweiten und (nur) 10 in der dritten bei nem 6-fach-join schon relativ umfangreich

wenn jemand ne idee hat, wie ich das ohne dieseS (hier unproblematischen, in meinem fall aber relativ ungünstigen) innere SELECT lösen kann: her damit

Danke


EDIT: erm ... ist das order by und limit denn schneller als ein max (in meinem fall jetzt) ?
Sumpfmensch ist offline   Mit Zitat antworten
Antwort

Lesezeichen


Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
mal ne frage creech Fahrwerk 0 08.11.2007 13:37:00
frage zu GS 500 E (GM 51 B) Allgemeines 26 11.09.2006 19:35:48
TÜV frage... ady Vergaser - Kraftstoff - Drosseln - Tuning 22 05.09.2006 23:04:34
LCD Frage!!! Ollek Elektrik, Elektronik und Beleuchtung 16 28.06.2006 21:27:30
Mal ne Frage... Allgemeines 1 27.03.2003 13:52:59


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13:16 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2025, vBulletin Solutions, Inc.