[Base] Requête SQL encore, MAX d'un champ

Bonjour,

Ne pouvant trop compter sur le COUNT(*) de Base, j'essaie autre chose...

Je cherche à créer une requête SQL sous Base qui me rajoute un champ "calculé", le calcul étant la valeur max de ce champ pour la même valeur d'un autre champ.

Depuis :

nom | date_absence|
Larry | 05/09/2020 |
Sarah | 07/09/2020 |
Sarah | 12/09/2020 |
Sarah | 18/09/2020 |
Sarah | 01/10/2020 |
Anna | 25/09/2020 |
Anna | 27/09/2020 |
Anna | 05/10/2020 |
Henri | 21/09/2020 |
Henri | 25/09/2020 |

Je souhaite sortir ça :

nom | date_absence| max_absence |
Larry | 05/09/2020 | 05/09/2020 |
Sarah | 07/09/2020 | 01/10/2020 |
Sarah | 12/09/2020 | 01/10/2020 |
Sarah | 18/09/2020 | 01/10/2020 |
Sarah | 01/10/2020 | 01/10/2020 |
Anna | 25/09/2020 | 05/10/2020 |
Anna | 27/09/2020 | 05/10/2020 |
Anna | 05/10/2020 | 05/10/2020 |
Henri | 14/09/2020 | 25/09/2020 |
Henri | 25/09/2020 | 25/09/2020 |

Je tomberai peut-être sur le même problème car ma table est issue de CSV, mais j'essaie...

Merci

Bon...

J'aurais fait ça :

SELECT "a"."nom", "a"."date_absence", "b"."lastdate"
FROM "absencesCsv3" "a"
INNER JOIN (
  SELECT "nom", MAX( "date_absence" ) "lastdate"
  FROM "absencesCsv3"
  GROUP BY "nom" ) "b"
ON "a"."nom" = "b"."nom"
ORDER BY "nom", "date_absence"

Mais le champ lastdate du MAX reste vide comme pour le COUNT...

Si je ne fais rien que :
SELECT nom, MAX(date_absence) lastdate from absencesCsv3 GROUP BY nom

il me répond :
"La requête ne peut pas être exécutée. Elle est trop complexe. Seul « COUNT(*) » est pris en charge."

Probablement parce que ma table est du texte issu de CSV et non une vraie table HSQLDB...

Ça correspond à ce que j'ai décrit : HSQLDB 1.8 ne connaît pas le GROUP BY.

Par contre cela n'a rien à voir avec l'origine des données. Pour vous en convaincre, créez une nouvelle table avec deux colonnes VARCHAR, alimentez-les par des requêtes INSERT puis exécutez vos tests sur elles, vous obtiendrez le même résultat.

Le csv n'est qu'une répétition de lignes ayant la même structure, dont les éléments sont séparés par des virgules (historiquement). Rien de magique là-dedans.

Au cas où:

INSERT INTO "absences" ("nom", "date") VALUES ('Sarah', ´25/09/2020´); devrait fonctionner si votre table se nomme absences et les deux colonnes nom et date.

Exact,  chez moi, avec une base HSQLDB interne ça donne le bon résultat. Mais il faut que la date soit au format Date, sinon le résultat est faux.

Bonne soirée

Bonsoir,

Ça correspond à ce que j'ai décrit : HSQLDB 1.8 ne connaît pas le GROUP BY.

Bien sûr que si !

Mais la documentation de Base dit : "Avec les tables au format texte, l’accès aux tables par requêtes est également limité à une table à la fois etsans l’utilisation de fonctions."
Ce qui exclut COUNT, GROUP BY, etc

Par contre cela n'a rien à voir avec l'origine des données. Pour vous en convaincre, créez une nouvelle table avec deux colonnes VARCHAR, alimentez-les par des requêtes INSERT puis exécutez vos tests sur elles, vous obtiendrez le même résultat.

Eh bien non, ça fonctionne.

Bonne soirée

Bonjour,

SELECT "a"."nom", "a"."date_absence", "b"."lastdate"
FROM "absencesCsv3" "a"
INNER JOIN (
    SELECT "nom", MAX( "date_absence" ) "lastdate"
    FROM "absencesCsv3"
    GROUP BY "nom" ) "b"
ON "a"."nom" = "b"."nom"
ORDER BY "nom", "date_absence"

Mais le champ lastdate du MAX reste vide comme pour le COUNT...

Si je ne fais rien que :
SELECT nom, MAX(date_absence) lastdate from absencesCsv3 GROUP BY nom
Probablement parce que ma table est du texte issu de CSV et non une vraie table HSQLDB...

Exact,  chez moi, avec une base HSQLDB interne ça donne le bon résultat.

Merci.

Mais il faut que la date soit au format Date, sinon le résultat est faux.

En fait, je ne cherche pas réellement à avoir un tri chronologique sur la date, mais un tri sur n'importe quel champ à valeur unique pour le groupe, juste pour savoir que c'est *la dernière valeur du groupe*.
Donc même avec les dates en texte, ça me suffit.

C'est toujours dans la finalité de mon publipostage 1-n, pour définir une variable qui me dira si l'enregistrement suivant reste sur la même page ou passe au groupe suivant.

Bonsoir,

En fait, je ne cherche pas réellement à avoir un tri chronologique sur la date, mais un tri sur n'importe quel champ à valeur unique pour le groupe, juste pour savoir que c'est *la dernière valeur du groupe*.
Donc même avec les dates en texte, ça me suffit.

C'est toujours dans la finalité de mon publipostage 1-n, pour définir une variable qui me dira si l'enregistrement suivant reste sur la même page ou passe au groupe suivant.

Et le nom (qui est nécessairement le même ) ne suffit pas ?

Cdt,