Disons que j'ai une table avec deux colonnes: 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> 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'
4 Réponses :
Ceci fonctionnera:
SELECT * from Table1 where "ID"=1
order by "A" desc limit 10;
Je pense que cela fera:
SELECT * FROM (SELECT * from MyTable where ID > givenId order by A) sub LIMIT 10;
Top code> n'est pas disponible dans PostgreSQL. Je ne suis pas sûr de savoir pourquoi quelqu'un pourrait upvote cette réponse.
Vous ne voulez pas que les colonnes Notez que cela ne renvoie aucune ligne avec a code>, donc: A code> comme la valeur. Cela fonctionne également lorsque la valeur de comparaison n'est pas triée en premier. P> p>
Une commande de toute colonne dépend purement de la clause code> par code> 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 Donc, si vous p> veut les trois premières valeurs après ID = 1 P>
BlockQuote> 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 Démo STRUT> P> P> 1,4,6 code>, sauf si vous avez également spécifié la commande de l'ID.
par code>. Un comptage code> La fonction analytique peut venir à notre sauvetage pour marquer le point. P>