-2
votes

Trier par une colonne, mais être offset par un autre

Disons que j'ai une table avec deux colonnes: xxx pré>

Je veux trier par a, puis obtenir les 10 enregistrements après un identifiant donné. Quelle serait la meilleure façon de gérer cela à Postgres? P>

Pour clarifier, je veux trier par un, mais faire ma pagination par l'ID. Donc, si j'avais une table comme: p> xxx pré>

Donc, après avoir tri par a, je voudrais les trois premières valeurs après ID = 1, donc: p>

1 | 'C'
4 | 'G'
6 | 'H'


0 commentaires

4 Réponses :


0
votes

Ceci fonctionnera:

SELECT * from Table1 where "ID"=1 
    order by "A" desc limit 10; 


0 commentaires

2
votes

Je pense que cela fera:

SELECT *
FROM (SELECT * from MyTable where ID > givenId order by A) sub
LIMIT 10;


1 commentaires

Top n'est pas disponible dans PostgreSQL. Je ne suis pas sûr de savoir pourquoi quelqu'un pourrait upvote cette réponse.



1
votes

Vous ne voulez pas que les colonnes a , donc: xxx

Notez que cela ne renvoie aucune ligne avec A comme la valeur. Cela fonctionne également lorsque la valeur de comparaison n'est pas triée en premier.


0 commentaires

1
votes

Une commande de toute colonne dépend purement de la clause par et les termes "avant" ou "après" entrent dans l'image uniquement lorsqu'il y a une commande prédéterminée. Ainsi, une fois que les enregistrements sont commandés par la colonne "A", rien ne garantit que l'ID sera commandé dans la séquence 1,4,6 , sauf si vous avez également spécifié la commande de l'ID.

Donc, si vous

veut les trois premières valeurs après ID = 1

Cela signifie qu'il devrait y avoir un moyen de déterminer le point où la valeur d'identification est devenue 1 et toutes les rangées au-delà doivent être considérées. Pour vous assurer que vous devez inclure explicitement ID dans la commande par . Un comptage La fonction analytique peut venir à notre sauvetage pour marquer le point. xxx

Démo


0 commentaires