2016-06-08 8 views
-2

Ich muss ein Protokoll mit dem Kaufdatum eines Artikels erstellen.Erstellen eines Protokolls mit dem Kaufdatum

Artikel können nur von einem Käufer zur Zeit besessen werden. Also, zum Beispiel, wenn item1 wurde von buyer2 im Jahr 2009 und danach von buyer1 im Jahr 2015 gekauft, dann war zwischen 2009 und 2015 im Besitz von buyer2.

Hier ist meine Tabelle:

+--------+------------+-----------+----------+ 
| id_doc | date  | id_item | id_buyer | 
+--------+------------+-----------+----------+ 
|  11 | 2016-06-07 | 1   |  4 | 
|  10 | 2016-06-06 | 1   |  4 | 
|  1 | 2015-11-30 | 1   |  1 | 
|  9 | 2009-01-01 | 1   |  2 | 
|  4 | 2001-01-12 | 1   |  2 | 
|  8 | 1996-06-06 | 1   |  2 | 
|  3 | 1995-05-29 | 1   |  1 | 
|  2 | 1998-05-23 | 2   |  2 | 
|  7 | 2014-10-10 | 3   |  2 | 
|  6 | 2003-12-12 | 3   |  3 | 
|  5 | 1991-01-12 | 3   |  2 | 
+--------+------------+-----------+----------+ 

Hier ist eine Art Tisch/view ich brauche:

+------------+------------+-----------+----------+--------+ 
| date_from | date_to | id_item | id_buyer | id_doc | 
+------------+------------+-----------+----------+--------+ 
| 2016-06-07 | -   | 1   |  4 |  11 | 
| 2016-06-06 | 2016-06-07 | 1   |  4 |  10 | 
| 2015-11-30 | 2016-06-06 | 1   |  1 |  1 | 
| 2009-01-01 | 2015-11-30 | 1   |  2 |  9 | 
| 2001-01-12 | 2009-01-01 | 1   |  2 |  4 | 
| 1996-06-06 | 2001-01-12 | 1   |  2 |  8 | 
| 1995-05-29 | 1996-06-06 | 1   |  1 |  3 | 
| 1998-05-23 | -   | 2   |  2 |  2 | 
| 2014-10-10 | -   | 3   |  2 |  7 | 
| 2003-12-12 | 2014-10-10 | 3   |  3 |  6 | 
| 1991-01-12 | 2003-12-12 | 3   |  2 |  5 | 
+------------+------------+-----------+----------+--------+ 

ich viel mit GROUP BY versucht habe, GROUP_CONCAT, nächsten Datensatz zuzugreifen versuchen, Datum usw., aber ich kann nicht herausfinden, wie ich das Problem lösen kann.

Vielen Dank im Voraus.

Antwort

0

Ich fand schließlich die Lösung nur für vergangene Einkäufe.

SELECT 
    main.id_doc, main.id_item, main.date AS "date_from", bi.date AS "date_to", main.id_buyer 
FROM 
    MyTable main, MyTable bi 
WHERE 
    bi.id_doc = 
    (
     SELECT sub.id_doc 
     FROM MyTable sub 
     WHERE sub.id_item = main.id_item AND sub.date > main.date ORDER BY sub.date ASC LIMIT 1 
    ); 
Verwandte Themen