0
votes

MySQL Créer une vue avec des numéros de séquence pour chaque groupe

J'ai vu une solution similaire sur ce site, mais elle n'est pas utilisable dans une vue en raison de limitations d'utilisation variable:

Séquence de génération de chaque groupe dans MySQL

une table indique un 1000 mots donc ici va:

J'ai ceci sur Une table: xxx

Je le veux dans une vue: xxx

Aide!

Si correspondant, j'utilise MySQL Workbench sur Windows 10.


1 commentaires

Pourrait-il jamais être un "A100"?


3 Réponses :


1
votes

Si vous exécutez MySQL 8.0, utilisez simplement row_number () : xxx

si vous exécutez une version antérieure et vous Impossible d'utiliser des variables, une option est une sous-requête corrélée (bien que cela soit beaucoup moins efficace que les fonctions ou variables de fenêtre): xxx

Notez que l'utilisation de cette technique, les cravates obtiendraient Le même SEQ - donc cela se comporte effectivement comme la fonction de fenêtre Rank () plutôt que Row_Number () .


0 commentaires

0
votes

Si vous utilisez une version plus ancienne de MySQL, vous pouvez utiliser une sous-requête corrélée pour générer la séquence: xxx

si vous sont à l'aide de MySQL 8+ , alors utilisez rangée_number : xxx


1 commentaires

Travaillé comme un charme! Merci à tous!



0
votes

Les deux réponses fonctionnent, mais xxx pré>

est plus précise. Cela montre exactement est demandé dans la question. La requête de style plus ancienne effectue le même travail, mais si plusieurs clauses sont placées dans la requête, le résultat est identique à sa demande ou nous nous attendons. P>

J'ai testé cette logique à l'aide de cette longue requête compliquée: p>

SELECT
    ROW_NUMBER() OVER (PARTITION BY Test_Centre ORDER BY Appliction_ID) Sr,
    Appliction_ID,
    Name_of_Applicant,
    Domicile, Gender,
    CONCAT(LEFT(CNIC, 5),'-',SUBSTRING(CNIC, 6, 7),'-',RIGHT(CNIC, 1)) AS CNIC,
    DATE_FORMAT(Date_of_Birth, "%d-%b-%Y") AS Data_of_Birth,
    DATE_FORMAT(FROM_DAYS(DATEDIFF('2020-08-11', Date_of_Birth)),'%Y') +0 AS Age,
    CONCAT(LEFT(Mobile_Number, 4),'-',SUBSTRING(Mobile_Number, 5, 7)) AS Mobile_Number,
    Test_Centre
FROM mt_applications
WHERE
    DATE_FORMAT(FROM_DAYS(DATEDIFF('2020-08-11', Date_of_Birth)),'%Y') >= 18 AND 
    DATE_FORMAT(FROM_DAYS(DATEDIFF('2020-08-11', Date_of_Birth)),'%Y') <= 27 AND 
    Name_of_Post = 'ASSISTANT (BPS-15)'
ORDER BY
    Test_Centre ASC,
    Appliction_ID ASC;


0 commentaires