sql >> Database >  >> RDS >> PostgreSQL

Rijen ophalen op basis van voorwaarde

Er zijn twee redenen waarom row y niet wordt geretourneerd is te wijten aan de voorwaarde:

  • b.start > a.start betekent dat een rij nooit met zichzelf samenkomt
  • De GROUP BY retourneert slechts één record per APP_nm waarde, maar alle rijen hebben dezelfde waarde.

Er zijn echter nog meer logische fouten in de query die niet met succes kunnen worden afgehandeld. Hoe weet het bijvoorbeeld wanneer een "nieuwe" sessie begint?

De logica die u zoekt, kan worden bereikt in normale PostgreSQL met behulp van een DISTINCT ON functie, die één rij per invoerwaarde in een specifieke kolom toont. Echter, DISTINCT ON wordt niet ondersteund door Redshift.

Enkele mogelijke oplossingen:DISTINCT ON soortgelijke functionaliteit voor Redshift

De uitvoer die u zoekt, zou triviaal zijn als u een programmeertaal gebruikt (die resultaten kan doorlopen en variabelen kan opslaan), maar is moeilijk toe te passen op een SQL-query (die is ontworpen om op rijen met resultaten te werken). Ik zou aanraden om de gegevens te extraheren en door een eenvoudig script te laten lopen (bijvoorbeeld in Python) dat vervolgens de Start &End-combinaties kan uitvoeren die u zoekt.

Dit is een uitstekende use-case voor een Hadoop Streaming-functie , die ik in het verleden met succes heb geïmplementeerd. Het zou de records als invoer nemen, vervolgens de starttijd 'onthouden' en alleen een record uitvoeren als aan de gewenste eindlogica is voldaan.



  1. Wat is het maximale aantal toegestane parameters per type databaseprovider?

  2. hoe de celbreedte automatisch aan te passen in fpdf met behulp van php en mysql

  3. Hoe selecteer ik datums van de laatste 30 dagen in MySQL, zelfs als de datums niet aanwezig zijn in mysql?

  4. PDO:Kon stuurprogramma php/mysql niet vinden