Je dois sélectionner des lignes d'échantillons d'un ensemble. Par exemple, si ma requête select renvoie x lignes alors si x est supérieur à 50, je veux seulement 50 lignes retournées, mais pas seulement les 50 premières mais 50 qui sont réparties uniformément sur le jeu de résultats. La table dans ce cas enregistre des itinéraires - emplacements GPS + DateTime. Je commande sur DateTime et j'ai besoin d'un échantillon raisonnable des valeurs Latitude Longitude &. Merci d'avance [SQL Server 2008]SQL sélectionner un échantillon de lignes
Répondre
Je vous suggère d'ajouter une colonne calculée à votre sélection sur ResultSet obtenu un nombre aléatoire, puis sélectionnez les 50 premiers triés par cette colonne. Cela vous donnera un échantillon aléatoire.
Par exemple:
SELECT TOP 50 *, RAND(Id) AS Random
FROM SourceData
ORDER BY Random
où SourceData est votre table de données source ou vue. Cela suppose que T-SQL sur SQL Server 2008, en passant. Il suppose également que vous avez une colonne Id avec des identifiants uniques sur votre source de données. Si vos ids sont très faibles chiffres, il est une bonne pratique de les multiplier par un grand nombre entier avant de les transmettre à RAND, comme ceci:
RAND(Id * 10000000)
Pour obtenir des lignes échantillon dans SQL Server, utilisez cette requête:
SELECT TOP 50 * FROM Table
ORDER BY NEWID();
Si vous souhaitez obtenir chaque n-ième ligne (10, dans cet exemple), essayez cette requête:
SELECT * From
(
SELECT *, (Dense_Rank() OVER (ORDER BY Column ASC)) AS Rank
FROM Table
) AS Ranking
WHERE Rank % 10 = 0;
Plus exemples de requêtes sélection de lignes aléatoires pour d'autres SGBDR populaires peuvent être trouvés ici: http://www.petefreitag.com/item/466.cfm
Je pense que c'est MS SQL Server –
Chaque ligne n'th pour obtenir 50:
SELECT *
FROM table
WHERE row_number() over() MOD (SELECT Count(*) FROM table)/50 == 0
FETCH FIRST 50 ROWS ONLY
Et si vous voulez un échantillon aléatoire, aller avec la réponse de jimmy_keen.
MISE À JOUR: En ce qui concerne l'exigence de fonctionner sur MS SQL, je pense qu'il devrait être changé à ce (pas MS SQL Server autour de tester si):
SELECT TOP 50 *
FROM (
SELECT t.*, row_number() over() AS rn, (SELECT count(*) FROM table)/50 AS step
FROM table t
)
WHERE rn % step == 0
Si vous voulez un échantillon statiquement correct, l'échantillon de table est une mauvaise solution. Une bonne solution comme je l'ai décrit dans here basé sur un document de recherche Microsoft, est de créer une vue matérialisée sur votre table qui comprend une colonne supplémentaire comme CAST (ROW_NUMBER() OVER (...) AS BYTE) comme RAND_COL_, alors vous peut ajouter un index sur cette colonne, plus d'autres colonnes intéressantes et obtenir des échantillons statistiquement corrects pour vos requêtes assez rapidement. (en utilisant WHERE RAND_COL_ = 1).
- 1. SQL sélectionner des lignes distinctes
- 2. Comment sélectionner une plage de lignes sage dans SQL Server
- 3. Sql sélectionner des lignes contenant une partie de la chaîne
- 4. iphone échantillon de calendrier
- 5. Sélectionner toutes les lignes de SQL basée sur l'existence de plusieurs lignes (numéros de séquence)
- 6. Bon échantillon linq à sql sophistiqué?
- 7. Comment sélectionner plusieurs lignes remplies de constantes?
- 8. requête SQL pour sélectionner des lignes non référencées
- 9. sélectionner 10 lignes avec décalage horaire le plus bas sql
- 10. Comment sélectionner des lignes uniques uniquement en SQL?
- 11. Sélectionnez un échantillon aléatoire de résultats d'un résultat de requête
- 12. Comment sélectionner N lignes aléatoires en utilisant SQL pur?
- 13. Comment utiliser SQL pour sélectionner des lignes contenant plus de 50 lignes dans une autre table?
- 14. Instruction SQL pour sélectionner toutes les lignes du jour précédent
- 15. Comment sélectionner un index sql
- 16. SQL: "NOT IN" alternative pour sélectionner des lignes basées sur des valeurs de * différentes * lignes?
- 17. Comment inverser un échantillon audio?
- 18. mysql sélectionner plusieurs lignes dans
- 19. 3+ lignes dans SQL
- 20. EJB JMS Timer, un échantillon?
- 21. Sql combiner 2 lignes à un
- 22. Comment sélectionner un nombre fixe de lignes pour chaque groupe?
- 23. Échantillon de ruban
- 24. comment sélectionner les lignes de la table
- 25. échantillon ExpandableListView de Google
- 26. mysql sélectionner les données à partir de plusieurs lignes
- 27. Comment configurer un ObjectDataSource pour sélectionner des lignes d'un ListView
- 28. Comment sélectionner les lignes commençant par un chiffre dans PostgreSQL?
- 29. Comment sélectionner plusieurs lignes dans un dictionnaire (executemany select)
- 30. Existe-t-il un échantillon pour ALAssetsLibrary
Quel SGBD utilisez-vous? –
SQL Server 2008 – Pierce