Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Aussortierung von SQL-Abfrage-Werten

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Aussortierung von SQL-Abfrage-Werten

    Hallo liebe Mitglieder des Forums,

    ich bin seit eben gerade hier registriert und habe schon ein Problem das zu lösen ist.

    Ich habe eine Datenbank-Abfrage gestaltet:

    PHP-Code:
        switch($text)
        {
            // Keine Eingabe
            case FALSE:
                ?>  <script language="javascript" type="text/javascript">
                            alert('Bitte machen Sie eine Eingabe!');
                    </script> <?php
                
    echo ibase_errmsg();
                die;

            
    // Eingabe: Komma -> Alles anzeigen
            
    case ',':
                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr
                        ORDER BY
                            pa_name,
                            pa_vorname;"
    ;
                break;

            
    // Eingabe = Zahl
            
    case is_numeric($text):
                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_PAT_NR) LIKE '"
    .$text."%';";
                break;

            case (
    strpos($text',')<1):
                
    $splitted_name explode(','$text);

                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                        ORDER BY
                            pa_name,pa_vorname;"
    ;

            
    // Suche nach Vor- und Nachnamen über Eingabe: Komma
            
    case (strpos($text',')>0):
                
    $splitted_name explode(','$text);

                
    $name trim($splitted_name[0]);
                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_NAME) LIKE '"
    .strtolower($name)."%'
                            AND LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                        ORDER BY
                            pa_name,pa_vorname;"
    ;
                break;

            
    // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen
            
    case (strpos($text' ')>0):
                
    $splitted_name explode(' '$text);

                
    $name trim($splitted_name[0]);
                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_NAME) LIKE '"
    .strtolower($name)."%'
                            AND LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                        ORDER BY
                            pa_name,pa_vorname;"
    ;
                break;

            
    // Suche nach Vor- und Nachnamen über Eingabe: Kommas anschließenden Leerzeichen
            
    case (strpos($text', ')>0):
                
    $splitted_name explode(', '$text);

                
    $name trim($splitted_name[0]);
                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_NAME) LIKE '"
    .strtolower($name)."%'
                            AND LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                        ORDER BY
                            pa_name,pa_vorname;"
    ;
                break;

            
    // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen anschließend Komma
            
    case (strpos($text' ,')>0):
                
    $splitted_name explode(' ,'$text);

                
    $name trim($splitted_name[0]);
                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_NAME) LIKE '"
    .strtolower($name)."%'
                            AND LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                        ORDER BY
                            pa_name,pa_vorname;"
    ;
                break;

            
    // Suche nach Vor- und Nachnamen über Eingabe: Leerzeichen, Komma, Leerzeichen
            
    case (strpos($text' , ')>0):
                
    $splitted_name explode(' , '$text);

                
    $name trim($splitted_name[0]);
                
    $vorname trim($splitted_name[1]);

                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                        FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_NAME) LIKE '"
    .strtolower($name)."%'
                            AND LOWER(PA_VORNAME) LIKE '"
    .strtolower($vorname)."%'
                            ORDER BY
                                pa_name,pa_vorname;"
    ;
                break;

            
    // Normale Suche nach Nachnamen
          
    default:
                
    $query "SELECT
                            pa_name,
                            pa_vorname,
                            pa_titel,
                            substring(100+extract(DAY FROM pa_geb_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM pa_geb_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM pa_geb_datum),
                            vs_kas_bezeichnung,
                            vs_versich_art,
                            vs_mart,
                            pa_behandler,
                            pa_pat_nr,
                            substring(100+extract(DAY FROM vs_ab_datum)from 2 for 2)||
                                '.'|| substring(100+extract(MONTH FROM vs_ab_datum)from 2 for 2)||
                                '.'|| extract(YEAR FROM vs_ab_datum)
                         FROM
                            patient,
                            versichertenstatus
                        WHERE
                            pa_pat_nr=vs_pat_nr AND
                            LOWER(PA_PAT_NR) LIKE '"
    .$text."%'
                        ORDER BY
                            vs_ab_datum DESC;"
    ;
        }

        
    // Login und Verbindung zur Query
        
    $dbabfrage ibase_query($login$query);
            
    //Fehlermeldung
            
    if($dbabfrage==false)
            {
                echo(string)
    ibase_errmsg();
                die;
            }

        
    // Datenbank anzeigen
        
    echo '<br />';
        echo 
    '<table border="1" align="center" style="background-color: white; min-width: 800px; font-family: Arial;">';
            echo 
    '<tr>';
                echo 
    '<th>Name, ';
                echo 
    'Vorname';
                echo 
    '<span style="white-space:pre">    </span>';
                echo 
    'Titel</th>';
                echo 
    '<th>Geb.-Datum</th>';
                echo 
    '<th>Kr.-Kass.-Namen</th>';
                echo 
    '<th>Priv.</th>';
                echo 
    '<th>Mitgl.</th>';
                echo 
    '<th>Stam.</th>';
                echo 
    '<th>Pat-Nr.</th>';
            echo 
    '</tr>';
        while(
    $zeile ibase_fetch_row($dbabfrage))
        {
            echo 
    '<tr>';

            for(
    $j=0$j<1$j++)
            {
                echo 
    '<td>'.(string)$zeile[0].', '.(string)$zeile[1].'<span style="white-space:pre">    </span>'.(string)$zeile[2].'</td>';
            }

            for(
    $j=3$j<5$j++)
            {
                echo 
    '<td>' . (string)$zeile[$j] . '</td>';

                if(
    strlen($zeile[4]) >= '15')
                {
                    
    $zeile[4]=substr($zeile[4], 0,15);
                }
            }

            if(
    $zeile[5] == '1')
            {
                echo 
    '<td> </td>';
            }
            elseif(
    $zeile[5] == '2')
            {
                echo 
    '<td>P</td>';
            }

            switch(
    $zeile[6])
            {
                case 
    '1':
                    echo 
    '<td>M</td>';
                    break;

                case 
    '3':
                    echo 
    '<td>F</td>';
                    break;

                case 
    '5':
                    echo 
    '<td>R</td>';
                    break;

                default:
                    echo 
    '<td>-</td>';
                    break;
            }

            echo 
    '<td>' . (string)$zeile[7] . '</td>';

            for(
    $j=8$j<10$j++)
            {
                echo 
    '<td>' . (string)$zeile[$j] . '</td>';
            }

            echo 
    '</tr>';
        }
        echo 
    '</table>';
    Diese Abfrage gibt eine Tabelle aus die wie folgt aussieht:

    [Bildlink entfernt]

    Wie man sehen kann wird da eine Person doppelt ausgegeben.
    Das ist deshalb, weil die Patientin einmal die Krankenkasse gewechselt hat.
    Ich allerdings brauche nur den aktuelleren Wert. Ich weiß allerdings nicht wie ich das jetzt am besten programmieren kann, damit es das auch richtig anzeigt. :-/

    Bin für jede Hilfe dankbar!

  • #2
    Willkommen im Forum.

    Vielleicht so: Within-group aggregate

    Sind das Originaldaten? Die würde ich glaube ich nicht ins Internet stellen.

    Kommentar


    • #3
      Re:

      Zitat von mermshaus Beitrag anzeigen
      Vielleicht so: Within-group aggregate
      Ich weiß nicht ob mir das sonderlich weiterhilft.. denn ich arbeite nicht mit MySQL sondern mit FireBird. :-/

      Kommentar


      • #4
        dann schau mal ins Firebird manual, wie du gängige SQL-Befehle dort umsetzen kannst / musst - evtl hilft dir auch group by weiter ...

        Kommentar


        • #5
          Zitat von eagle275 Beitrag anzeigen
          evtl hilft dir auch group by weiter ...
          Bitte hör mir mit dem GROUP BY auf.. <.<
          Immer wenn ich versuche ein GROUP BY wo mit ein zu bauen, dann haut er mir 'n sauberen Fehler um die Ohren. Wobei es rein von der Überlegung her stimmen sollte. :-/

          Kommentar


          • #6
            Zitat von PATix Beitrag anzeigen
            Bitte hör mir mit dem GROUP BY auf.. <.<
            Immer wenn ich versuche ein GROUP BY wo mit ein zu bauen, dann haut er mir 'n sauberen Fehler um die Ohren.
            Bitte hör' uns mit „funzt nich“ auf, sondern liefere nachvollziehbare Problembeschreibungen.

            Kommentar


            • #7
              wenn du mit group nicht glücklich wirst, dann schau dir DISTINCT an, das liefert dir auch jeden WERT der betreffenden Spalte nur 1 mal

              Kommentar


              • #8
                Zitat von Wikipedia
                Grundsätzlich ist der Firebird-Server SQL-92-Entry-Level-1-konform. Firebird 1.5 folgt dem SQL-Standard nach ANSI SQL-99. Firebird 2.0 ist überwiegend konform mit SQL-2003 (17 obligatorische Fähigkeiten fehlen ganz, vor allem Schemata; 9 obligatorische Fähigkeiten werden nur teilweise unterstützt).
                Mein Link in #2 führt zu einigen Ansätzen. Das sollte die SQL-Ebene eigentlich abdecken. Die Queries dort sind nun wirklich nicht übermäßig spezifisch.

                Kommentar


                • #9
                  Zitat von eagle275 Beitrag anzeigen
                  wenn du mit group nicht glücklich wirst, dann schau dir DISTINCT an, das liefert dir auch jeden WERT der betreffenden Spalte nur 1 mal
                  Habe ich nun ausprobiert, hat auch nicht das gewünschte/erhoffte Ergebnis herausgebracht. Ich bin mit meinem Latein jetzt bald echt am Ende.

                  Kommentar


                  • #10
                    Zitat von ChrisB
                    Bitte hör' uns mit „funzt nich“ auf, sondern liefere nachvollziehbare Problembeschreibungen.
                    Zitat von mermshaus
                    Mein Link in #2 führt zu einigen Ansätzen. Das sollte die SQL-Ebene eigentlich abdecken.
                    Theoretisch kannst du die SQL-Rückgaben auch auf PHP-Ebene nachbearbeiten. Das ist natürlich nicht gerade elegant, kann aber zielführend sein, wenn du es mit SQL nicht hinbekommst. Das hat allerdings den Nachteil, dass etwaige LIMIT-Angaben eine „falsche“ Anzahl an Werten zurückliefern.

                    Kommentar


                    • #11
                      Zitat von mermshaus Beitrag anzeigen
                      Theoretisch kannst du die SQL-Rückgaben auch auf PHP-Ebene nachbearbeiten. Das ist natürlich nicht gerade elegant, kann aber zielführend sein, wenn du es mit SQL nicht hinbekommst. Das hat allerdings den Nachteil, dass etwaige LIMIT-Angaben eine „falsche“ Anzahl an Werten zurückliefern.
                      Hätte ich auch schon ausprobiert, allerdings würde das Teil erst mal "stundenlang" laden, bis es mir endlich eine Tabelle ausgibt.

                      Kommentar


                      • #12
                        da sich die Daten anscheinend ändern können, würde ich die Tabelle historisieren. z.b.: mit den 2 Felder gueltig_von, gueltig_bis wobei der letzte Datensatz immer gueltig_bis 9999-12-31 beinhaltet.

                        somit kannst du in deiner Abfrage mit gueltig_bis 9999-12-31 immer den aktuellen Datensatz ansprechen.

                        falls die Daten schon vorhanden sind und ein Änderungsdatum vorhanden ist, könntest du in einem Subselect das max Änderungsdatum pro Person ermitteln und mit einem Join verbinden.

                        Kommentar


                        • #13
                          Code:
                          -- phpMyAdmin SQL Dump
                          -- version 3.3.7deb5build0.10.10.1
                          -- http://www.phpmyadmin.net
                          --
                          -- Host: localhost
                          -- Generation Time: Mar 28, 2011 at 02:29 PM
                          -- Server version: 5.1.49
                          -- PHP Version: 5.3.3-1ubuntu9.3
                          
                          SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
                          
                          
                          /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
                          /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
                          /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
                          /*!40101 SET NAMES utf8 */;
                          
                          --
                          -- Database: `test`
                          --
                          
                          -- --------------------------------------------------------
                          
                          --
                          -- Table structure for table `patienten`
                          --
                          
                          CREATE TABLE IF NOT EXISTS `patienten` (
                            `name` varchar(255) NOT NULL,
                            `krankenkasse` varchar(255) NOT NULL,
                            `von` date NOT NULL,
                            `bis` date NOT NULL
                          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                          
                          --
                          -- Dumping data for table `patienten`
                          --
                          
                          INSERT INTO `patienten` (`name`, `krankenkasse`, `von`, `bis`) VALUES
                          ('Peter Müller', 'Superkasse', '2006-06-01', '2007-05-30'),
                          ('Peter Müller', 'Kasse ABC', '2007-06-01', '2012-05-30'),
                          ('Frank Zunder', 'Meine Kasse', '2008-06-01', '2009-05-30'),
                          ('Frank Zunder', 'Just another Kasse', '2009-06-01', '2013-05-30');
                          Code:
                          mysql> SELECT * FROM patienten;
                          +---------------+--------------------+------------+------------+
                          | name          | krankenkasse       | von        | bis        |
                          +---------------+--------------------+------------+------------+
                          | Peter Müller | Superkasse         | 2006-06-01 | 2007-05-30 |
                          | Peter Müller | Kasse ABC          | 2007-06-01 | 2012-05-30 |
                          | Frank Zunder  | Meine Kasse        | 2008-06-01 | 2009-05-30 |
                          | Frank Zunder  | Just another Kasse | 2009-06-01 | 2013-05-30 |
                          +---------------+--------------------+------------+------------+
                          4 rows in set (0.00 sec)
                          
                          mysql> SELECT p1.name,p1.krankenkasse,p1.von,p1.bis
                              -> FROM patienten AS p1
                              -> LEFT JOIN patienten AS p2 ON p1.name  = p2.name AND p1.bis < p2.bis
                              -> WHERE p2.name IS NULL;
                          +---------------+--------------------+------------+------------+
                          | name          | krankenkasse       | von        | bis        |
                          +---------------+--------------------+------------+------------+
                          | Peter Müller | Kasse ABC          | 2007-06-01 | 2012-05-30 |
                          | Frank Zunder  | Just another Kasse | 2009-06-01 | 2013-05-30 |
                          +---------------+--------------------+------------+------------+
                          2 rows in set (0.00 sec)


                          Edit: Ja, ja, Mai hat 31 Tage. Live with it.

                          Kommentar


                          • #14
                            Zitat von mermshaus Beitrag anzeigen
                            Code:
                            -- phpMyAdmin SQL Dump
                            -- version 3.3.7deb5build0.10.10.1
                            -- http://www.phpmyadmin.net
                            --
                            -- Host: localhost
                            -- Generation Time: Mar 28, 2011 at 02:29 PM
                            -- Server version: 5.1.49
                            -- PHP Version: 5.3.3-1ubuntu9.3
                            
                            SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
                            
                            
                            /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
                            /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
                            /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
                            /*!40101 SET NAMES utf8 */;
                            
                            --
                            -- Database: `test`
                            --
                            
                            -- --------------------------------------------------------
                            
                            --
                            -- Table structure for table `patienten`
                            --
                            
                            CREATE TABLE IF NOT EXISTS `patienten` (
                              `name` varchar(255) NOT NULL,
                              `krankenkasse` varchar(255) NOT NULL,
                              `von` date NOT NULL,
                              `bis` date NOT NULL
                            ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
                            
                            --
                            -- Dumping data for table `patienten`
                            --
                            
                            INSERT INTO `patienten` (`name`, `krankenkasse`, `von`, `bis`) VALUES
                            ('Peter Müller', 'Superkasse', '2006-06-01', '2007-05-30'),
                            ('Peter Müller', 'Kasse ABC', '2007-06-01', '2012-05-30'),
                            ('Frank Zunder', 'Meine Kasse', '2008-06-01', '2009-05-30'),
                            ('Frank Zunder', 'Just another Kasse', '2009-06-01', '2013-05-30');
                            Code:
                            mysql> SELECT * FROM patienten;
                            +---------------+--------------------+------------+------------+
                            | name          | krankenkasse       | von        | bis        |
                            +---------------+--------------------+------------+------------+
                            | Peter Müller | Superkasse         | 2006-06-01 | 2007-05-30 |
                            | Peter Müller | Kasse ABC          | 2007-06-01 | 2012-05-30 |
                            | Frank Zunder  | Meine Kasse        | 2008-06-01 | 2009-05-30 |
                            | Frank Zunder  | Just another Kasse | 2009-06-01 | 2013-05-30 |
                            +---------------+--------------------+------------+------------+
                            4 rows in set (0.00 sec)
                            
                            mysql> SELECT p1.name,p1.krankenkasse,p1.von,p1.bis
                                -> FROM patienten AS p1
                                -> LEFT JOIN patienten AS p2 ON p1.name  = p2.name AND p1.bis < p2.bis
                                -> WHERE p2.name IS NULL;
                            +---------------+--------------------+------------+------------+
                            | name          | krankenkasse       | von        | bis        |
                            +---------------+--------------------+------------+------------+
                            | Peter Müller | Kasse ABC          | 2007-06-01 | 2012-05-30 |
                            | Frank Zunder  | Just another Kasse | 2009-06-01 | 2013-05-30 |
                            +---------------+--------------------+------------+------------+
                            2 rows in set (0.00 sec)
                            Hja, mag ja jetzt schön und gut sein, wenn ich das mit dem LEFT JOIN bei mir einfüge kommt das selbe raus wie sonst immer. Und das mit p2 und p1 und etc. kann ich schlecht nachmachen, da ich eine unbestimmte Anzahl von Wiederhollungen habe. Ab und zu kommt es vor das sich ein Patient gar nicht wiederholt und es kann sogar sein das er sich bis zu sechs mal wiederholt..
                            Wie kann man das Problem den jetzt umgehen?

                            Kommentar


                            • #15
                              Der Left join ordnet nur neuere zu, sofern es sie denn gibt, und liefert am ende nur die Datensätze zurück, wo es keinen neueren Datensatz gibt. 2 "p" reichen also völlig

                              Wenn das bei Dir nicht funktioniert, dann musst Du in der Anwendung was falsch gemacht haben...

                              Gruß Jens

                              Kommentar

                              Lädt...
                              X