GOOGLE ADS

lundi 2 mai 2022

filtrer les données des enregistrements en sql

J'ai une table. dans lequel, il y a 12 enregistrements disponibles. dans ceux que je veux filtrer et obtenir des données comme de la colonne de source de valeur de cellule hp à avant les enregistrements de colonne de source de valeur de cellule hp.

Voici le tableau:

seq_id file_name source date
b21345350 a.txt ad 2022-04-15
b32145660 e.txt qe 2022-04-15
c43526890 ace.txt hp 2022-04-15
re2345566 wer.csv hp 2022-04-15
b43251044 op.xlsx fa 2022-04-15
b6512400 ip.csv jm 2022-04-15
b9123420 tb.xlsx tp 2022-04-15
b3214563 cv.txt ux 2022-04-14
b45678900 em.txt hp 2022-04-14
b65357023 rt.csv hp 2022-04-14
b90879081 ty.txt mp 2022-04-14
b19019019 sd.txt jp 2022-04-14

Ici, il devrait être le résultat de sortie :

 seq_id file_name source date
c43526890 ace.txt hp 2022-04-15
re2345566 wer.csv hp 2022-04-15
b43251044 op.xlsx fa 2022-04-15
b6512400 ip.csv jm 2022-04-15
b9123420 tb.xlsx tp 2022-04-15
b3214563 cv.txt ux 2022-04-14


Solution du problème

Il n'y a pas d'ordre naturel des lignes dans une base de données relationnelle (comme dans une feuille de calcul). Voir:


  • Sélectionner les n dernières lignes sans utiliser la clause order by

  • Ordre de tri déterministe pour les fonctions de fenêtre


En supposant qu'une idcolonne établisse l'ordre des lignes que vous semblez tenir pour acquis (et n'est pas ), cela fonctionnerait :

SELECT (t).*
FROM (
SELECT t, count(*) FILTER (WHERE source = 'hp') OVER (ORDER BY id) AS hp_ct
FROM tbl t
) sub
WHERE hp_ct BETWEEN 1 AND 2;

db<>violon ici

Vous semblez vouloir toutes les lignes commençant par la première instance de source = 'hp'et s'arrêtant à la 3ème instance de la même chose. Faites donc un décompte courant dans la sous-requête sub, puis filtrez toutes les lignes avec le décompte 1 et 2.

Je travaille avec un alias de table tpour saisir toute la ligne et décomposer à l'extérieur SELECTpour me débarrasser de l'ajout hp_ctsans épeler tous les noms de colonne. C'est facultatif.

Aucun commentaire:

Enregistrer un commentaire

Comment utiliseriez-vous .reduce() sur des arguments au lieu d'un tableau ou d'un objet spécifique&nbsp;?

Je veux définir une fonction.flatten qui aplatit plusieurs éléments en un seul tableau. Je sais que ce qui suit n'est pas possible, mais...