Obtenir ligne avec la valeur max dans la Ruche/SQL?
Je suis nouveau à la Ruche/SQL, et je suis bloqué sur une assez simple problème. Mon apparence des données:
+------------+--------------------+-----------------------+
| carrier_iD | meandelay | meancanceled |
+------------+--------------------+-----------------------+
| EV | 13.795802119653473 | 0.028584251044292006 |
| VX | 0.450591016548463 | 2.364066193853424E-4 |
| F9 | 10.898001378359766 | 0.00206753962784287 |
| AS | 0.5071547420965062 | 0.0057404326123128135 |
| HA | 1.2031093279839498 | 5.015045135406214E-4 |
| 9E | 8.147899230704216 | 0.03876067292247866 |
| B6 | 9.45383857757506 | 0.003162096314343487 |
| UA | 8.101511665305816 | 0.005467725574605967 |
| FL | 0.7265068895709532 | 0.0041141513746490044 |
| WN | 7.156119279121648 | 0.0057419058192869415 |
| DL | 4.206288692245839 | 0.005123990066804269 |
| YV | 6.316802855264404 | 0.029304029304029346 |
| US | 3.2221527095063736 | 0.007984031936127766 |
| OO | 6.954715814690328 | 0.02596499362466706 |
| MQ | 9.74568222216328 | 0.025628100708354324 |
| AA | 8.720522654298968 | 0.019242775597574157 |
+------------+--------------------+-----------------------+
Je veux de la Ruche pour le retour à la ligne avec le meanDelay valeur max. J'ai:
SELECT CAST(MAX(meandelay) as FLOAT) FROM flightinfo;
qui, en effet, renvoie au max (j'utilise cast parce que mes valeurs sont enregistrées en tant que CHAÎNE de caractères). Alors:
SELECT * FROM flightinfo WHERE meandelay = (SELECT CAST(MAX(meandelay) AS FLOAT) FROM flightinfo);
J'obtiens l'erreur suivante:
FAILED: ParseException line 1:44 cannot recognize input near 'select' 'cast' '(' in expression specification
OriginalL'auteur marc | 2013-12-17
Vous devez vous connecter pour publier un commentaire.
Utiliser le le fenêtrage et les fonctions d'analyse de
Cela permettra également de résoudre le problème si plus d'une ligne a la même valeur max, vous profiterez de toutes les lignes. Si vous voulez juste une seule ligne de changement de
rank()
àrow_number()
ou ajouter un autre terme à laorder by
.OriginalL'auteur libjack
utilisation rejoindre la place.
left semi join
commande de le faire ici, exactement?OriginalL'auteur dimamah
Vous pouvez utiliser le
collect_max
UDF de Brickhouse ( http://github.com/klout/brickhouse ) pour résoudre ce problème, en passant d'une valeur de 1, ce qui signifie que vous ne voulez que la seule valeur max.Aussi, j'ai lu quelque part que la Ruche
max
UDF ne vous permet pas d'accéder à d'autres champs sur la ligne, mais je pense que c'est plus facile que d'utilisercollect_max
.OriginalL'auteur Jerome Banks
Je ne pense pas que votre sous-requête est permis ...
Un rapide coup d'oeil ici:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+les sous-requêtes
états:
OriginalL'auteur BWS