2012-04-11 9 views
-2

Hallo liebe Freunde von SO.Wie kann ich diese Abfrage in MySQL erreichen

Ich habe diese Tabellen:

PRECIOS

+---------+--------+-----------+-------------+------------+ 
| priceID | itemID | priceCash | pricePoints | priceDate | 
+---------+--------+-----------+-------------+------------+ 
|  1 |  1 |  30.00 |   90 | 2012-03-05 | 
|  2 |  2 |  40.00 |   120 | 2012-03-05 | 
|  6 |  2 |  50.00 |   50 | 2012-03-07 | 
|  7 |  2 |  55.00 |   50 | 2012-03-07 | 
+---------+--------+-----------+-------------+------------+ 

PUNKTE

+--------+----------------------+-------------+------------+----------+---------------+---------------+ 
| itemID | itemName    | itemWarning | itemUrgent | itemType | itemVipPoints | itemExistence | 
+--------+----------------------+-------------+------------+----------+---------------+---------------+ 
|  1 | Lubricante Orgasmix |   20 |   10 |  2 |    3 |   300 | 
|  2 | Anillo Vibrador  |   50 |   50 |  2 |   50 |   120 | 
|  3 | Crema Chantilly  |   5 |   20 |  1 |    0 |   500 | 
|  4 | Caribe Cooler  |   10 |   4 |  1 |    0 |   100 | 
|  5 | Cacahuates Japoneses |   20 |   10 |  1 |    0 |   400 | 
|  6 | Cerveza Sol (lata) |   12 |  112 |  1 |    0 |   200 | 
|  7 | Chocolate derretido |   20 |   10 |  1 |    0 |   200 | 
+--------+----------------------+-------------+------------+----------+---------------+---------------+ 

Ich brauche eine Tabelle wie folgt zu erhalten:

  • itemType muss '2'
  • sein itemID erforderlich ist
  • itemName
  • priceCash erforderlich ist
  • erforderlich itemExistence muss> 0

Aber das Hauptproblem (für mich) ist dass ich den LETZTEN priceCash für jedes einzigartige Einzelteil erhalten muss.

Zum Beispiel, wie Sie sehen können, hat itemID = 2 drei Preise. Ich brauche in diesem Fall nur die letzte (55.00).

Also, kurz gesagt: Ich brauche diese zu bekommen:

+--------+---------------------+-----------+ 
| itemID | itemName   | priceCash | 
+--------+---------------------+-----------+ 
|  1 | Lubricante Orgasmix |  30.00 | 
|  2 | Anillo Vibrador  |  55.00 | 
+--------+---------------------+-----------+ 

Aber mein bestes Ergebnis ist so etwas wie dieses :(

+--------+---------------------+-----------+ 
| itemID | itemName   | priceCash | 
+--------+---------------------+-----------+ 
|  1 | Lubricante Orgasmix |  30.00 | 
|  2 | Anillo Vibrador  |  40.00 | 
|  2 | Anillo Vibrador  |  50.00 | 
|  2 | Anillo Vibrador  |  55.00 | 
+--------+---------------------+-----------+ 

I 5USD Tipp auf 15. April wird mit Paypal zu demjenigen, der mir dabei helfen kann :) Versprochen.

SOLUTION

von kaj freundlicherweisevon

select it.itemID, it.itemName, p.priceCash 
from items it 
    inner join precios p on p.itemID = it.itemID 
    inner join (select itemID, max(priceID) latestPriceID 
       from precios 
       group by itemID) latestPrice on latestPrice.itemID = p.itemID and latestPrice.latestPriceID = p.priceID 
where it.itemType = 2 
    and it.itemExistence > 0 

Für diejenigen, die, es geht um eine Datenbank für ein Motel etwas dagegen, wo sie alle Arten von Dingen, für die sexuelle Lust zu verkaufen.

Danke.

+0

Schreiben Sie die Abfrage, die Sie versucht .. – Teja

+2

Leider beginnen meine Preise bei 100 $/Stunde. Dies ist nicht der Ort, um freiberufliche Hilfe zu bekommen. Es gibt andere Seiten dafür. – Cfreak

+3

Cmon, mit Spaltenwerten wie 'Lubricante Orgasmix' und' Anillo Vibrador', wer könnte widerstehen? –

Antwort

2

Vorausgesetzt, dass Sie doppelte haben priceDates für itemID = 2 Ich gehe davon aus, dass der neueste Preis kann unter Verwendung der priceID bestimmt werden. Sie benötigen also grundsätzlich eine Abfrage, um den aktuellen Preis pro Artikel zu finden und dann den entsprechenden Preis zu extrahieren.

So etwas wie die folgenden funktionieren sollte:

select it.itemID, it.itemName, p.priceCash 
from items it 
    inner join precios p on p.itemID = it.itemID 
    inner join (select itemID, max(priceID) latestPriceID 
       from precios 
       group by itemID) latestPrice on latestPrice.itemID = p.itemID and latestPrice.latestPriceID = p.priceID 
where it.itemType = 2 
    and it.itemExistence > 0 
+0

Wäre "LATEST priceCash" nicht auf MAX (priceDate), sondern auf ID? Einverstanden, die Daten in der Frage sind verdächtig, da wir im Idealfall Zeitgenauigkeit haben möchten, um bei der richtigen Reihenfolge zu helfen. –

+0

Nicht, wenn - wie ich im Intro zu der Abfrage sagte - es zwei Einträge für den gleichen Artikel für das gleiche Datum gibt - siehe Zeilen priceID 6 und 7 - sowohl für itemID = 2 als auch Datum 2012-03-07. Ja normalerweise würden Sie das Datum verwenden, aber hier scheint es nicht ... – kaj

+0

Kaj, seine Arbeit :) danke! Bitte geben Sie mir eine E-Mail, wo ich Ihnen den versprochenen Tipp zusenden kann. Ich werde es am 15. April tun. In 4 Tagen. –

-1
select x.itemID, x.itemName, y.priceCash from items x, precios y 
WHERE itemType=2 and x.itemID=y.itemID and x.itemExistence > 0 
and y.priceID = (select max(t.priceID) from precios t where x.itemID=t.itemID) 
group by x.itemID order by y.priceDate; 
+1

down Stimmen sollten überlegen, einen Kommentar hinzuzufügen. – kasavbere

Verwandte Themen