0
votes

Sélectionner des colonnes distinctes de plusieurs colonnes (toutes les colonnes) PSQL

J'essaie de faire une opération distincte sur les données OHLC où j'ai plusieurs dates par symbole

Je peux faire l'opération elle-même, elle ne renvoie que la date et le symbole xxx < / pré>

Mais j'aimerais que toutes les colonnes (supplémentaires: fermer, ouverte, haut, bas, volume) également.

Mon objectif est de renvoyer le dernier distinct (horodatage, Symbole)

Une idée que j'avais. xxx

Je vois que ce n'est pas aussi facile que cette déclaration.

J'ai lu que je pourrais être capable de le résoudre avec une sous-requête, une table temporaire ou une jointure (tout ce qui n'utilise pas distincts).


0 commentaires

3 Réponses :


0
votes

Voici votre requête.

select distinct t1.* from (
select row_number() over (partition by symbol order by timestamp desc) as rn, * from 
mv_qs_facts) as t1
    where t1.rn = 1


12 commentaires

Erreur "Sélectionnez Row_Number () sur (partition par S.SYMBOL, commander par TI ..." Avec la commande par ... J'ai pu exécuter la sous-requête (ou quoi que ce soit appelé) sans ordre par et S.Symbol (c'est-à-dire juste Symbole) En tant que tel "Sélectionnez Row_Number () sur (partition par symbole) sous forme de rn, horodatage, symbole de mv_qs_facts". Toute la commande fonctionne "Sélectionnez T1.SYMBOL, T1.TMESTAMP de (Sélectionnez Row_Number () sur (partition par symbole) en tant que rn, horodatage, symbole de mv_qs_facts) comme t1 où t1.rn = 1 "vérifie si cela fonctionne maintenant. Il ne renvoie toujours que le symbole et l'horodatage. Lequel ma commande originale a fait


mis à jour, supprimé la virgule entre la partition et la commande par


Ajout de la commande pour obtenir uniquement le dernier horodatage, mais celui-ci vous dépend.


La requête fonctionne. Mais ne renvoie que 2 symboles de col et horodatage. Ma requête originale "Sélectionnez l'horodatage distinct, symbole du groupe MV_QS_FACTS par MV_QS_FACTS.SYMBOL, MV_QS_FACCES.TMESTAMP;" fait la même chose. Ce que je veux faire, c'est de retourner des colonnes ouvertes, hautes, basses, fermées, de volume. Je soupçonne que je peux ajouter ces colonnes quelque part?


Je pense que vous devez rejoindre à nouveau la table sur son identifiant pour obtenir d'autres colonnes.


Eh bien c'était ma question.


Mise à jour de la réponse. Veuillez essayer de remplacer "ID" à votre colonne réelle


Je pourrais avoir une question majeure / mineure. Je fixe ma clé à l'horodatage, la date et je trouve que j'ai des dates en double ... En d'autres termes, je n'ai pas d'identification autonome ... qui peut être mon problème ou non. Je ne sais pas que je me joindrais sans cela. sur une note latérale. J'ai trouvé ceci: stackoverflow.com/questions/6127338/... par garret simpson qui ressemble à ce que cela fonctionnerait si j'avais aussi ID


Je l'ai eu, vous n'avez pas besoin de rejoindre. Vous pouvez sélectionner des colonnes complètes. Mise à jour de la réponse


qui ont renvoyé des symboles uniques ... vs horodatage, combinaisons de symboles. Tronquer jusqu'à 1 date par symbole. Il a rendu toutes les colonnes cependant. Désolé m'a pris si longtemps pour répondre, je retrouvais ma table pour avoir des identités ... ce qui n'a pas fonctionné exactement. Mais je ne pense pas que c'était la question (ma nouvelle colonne d'identification, comme elles sont toutes des NULLS)


J'ai corrigé ma table pour maintenant avoir une colonne d'identité. Donc quelle méthode fonctionne mieux. Je suis sur le point d'essayer cette fois de plus


Il ne fait toujours que 1 symbole et 1 date par symbole qui n'est pas ce que je voulais. J'en ai besoin pour renvoyer toutes les dates de distinction par symbole



1
votes

Utiliser distinct sur () code>: xxx pré>

Ceci retournera Fermer code>, Ouvrir code>, haut code> et bas code> pour un membre aléatoire du groupe. p>

Si vous souhaitez contrôler quel membre est utilisé, ajoutez un commander par code > La clause, puis le premier membre de cette ordonnance est pris. p>

Si le problème est la consommation de mémoire sur le client em>, vous devez utiliser des curseurs: p>

BEGIN;
DECLARE c CURSOR FOR SELECT ...;
FETCH 100 FROM c;
FETCH 100 FROM c;
...
COMMIT;


8 commentaires

Merci. J'ai plus de 2 millions d'enregistrements et cela manque de mémoire. : ... (Mon espoir était de le faire dans PSQL vs R pour essayer d'éviter les problèmes de mémoire, mais je vois que je les ai toujours.


Je l'ai abaissé à 1 même résultat. Y a-t-il un moyen de partition / groupe par symbole et ensuite faire l'opération


Cela semble improbable. S'il vous plaît expliquer en détail: quel composant est à court de mémoire? Quel est le message d'erreur? Existe-t-il un dépotoir de contexte mémoire dans le journal PostgreSQL?


Erreur: Sort de la mémoire pour le résultat de la requête


Le mot clé est "pour le résultat de la requête". Je parie que c'est le client qui pose des problèmes de maintenir le résultat en mémoire. Essayez d'utiliser un curseur et ne récupérez que quelques résultats à la fois.


Merci pour ce conseil. J'ai fait une table créée comme [puis votre requête]


Créez la température de la vue matérialisée comme sélectionnez ID (horodatage, symbole) ID, horodatage, symbole, fermeture, ouverte, haut, bas de QS_FACTS Commande par ID Desc; Produit une erreur: "Sélectionner des expressions distinctes doit correspondre à la commande initiale par expressions". Cela ne me permett donc pas de sélectionner le dernier identifiant distinct par symbole, horodatage


j'ai compris! Créez la température de la vue matérialisée comme Sélectionnez Distinct sur (symbole, horodatage) ID, horodatage, symbole, Fermer, ouvert, haut, bas de Qs_Facts Commande par symbole, horodatage, identifiant Desc; merci@rhodiumtoad sur #Postgresql sur irc.freenode.net



0
votes

i Ajout d'une pièce d'identité parce que j'avais initialement l'horodatage et la date de ma clé composite, mais il s'est avéré être mauvais avec des dates en double et j'avais besoin de quelque chose à faire référence à trier par

CREATE materialized view temp AS  
SELECT DISTINCT ON (symbol, timestamp)
   id, timestamp, symbol, close, open, high, low
FROM qs_facts order by symbol, timestamp, id desc;


0 commentaires