2010-07-28 4 views
0

J'essaye d'écrire du SQL qui tire de plusieurs tables en utilisant des syndicats, où la date sur les lignes est inférieure à une heure.Sélection SQL jusqu'au type complet de problème

Mais si le nombre total de lignes de la requête SQL ne correspond pas à environ 20, alors il doit changer l'endroit où la date est inférieure à deux heures et ainsi de suite jusqu'à 20 lignes extraites.

Est-ce possible de faire uniquement en SQL? J'ai un moyen de l'implémenter en utilisant PHP, mais je préférerais que tout soit fait en SQL.

Répondre

0

vous devez sélectionner les 20 premiers lors de la commande par date desc ..

donc pas besoin de calculer les niveaux ..

Sql Server

SELECT TOP 20 .. 

autres DB

SELECT ... LIMIT 0, 20 
+0

Oui mais ce que je veux, c'est que si le montant sélectionné est inférieur à vingt, élargir la recherche, des lignes créées dans la dernière heure aux lignes créées dans les deux dernières heures, et ainsi de suite jusqu'à 20 lignes sélectionnées – wiggles

+2

@wiggles : Le point est, vous sélectionnez plus que vous avez besoin, trier par date décroissante, puis le limiter en utilisant 'TOP' ou' LIMIT'. Cela vous donne seulement les 20 entrées les plus récentes. – cHao

+0

Après avoir lu au-dessus, cela a résolu mon problème. Merci. – wiggles

0

Cela ne fonctionnera probablement pas pour tous les serveurs DB, mais vous devriez être capable de faire quelque chose comme

SELECT TOP 20 * 
FROM (SELECT your columns from table1 UNION SELECT your columns from table2) temp 
ORDER BY [the date column] DESC 

Sélection d'un sous-requête ralentit les choses un peu, cependant, et vous auriez à éviter les clauses WHERE dans la sous-requête (ou au moins, les mettre assez loin qu'ils avaient toujours revenir au moins 20 rangs) pour que les choses fonctionnent.

Il y a probablement quelque chose de très similaire qui fonctionnera avec MySQL, car il ne le fait pas TOP xxx. Vous devriez pouvoir dire LIMIT 20 à la fin, mais je ne suis pas sûr que MySQL vous permettra de choisir parmi les sous-requêtes comme ça. Je me souviens avoir eu des problèmes avec ça dans le passé, mais franchement, MySQL était un jouet jusqu'à la version 5.0.