2016-11-13 1 views
2

J'ai la table pyDAL suivante:Création d'un HAVING COUNT (colonne)> 2 clause pyDAL

market = db.define_table(
    'market', 
    Field('name'), 
    Field('ask', type='double'), 
    Field('timestamp', type='datetime', default=datetime.now) 
    ) 

Je voudrais utiliser la langue d'expression pour exécuter l'instruction SQL suivante:

SELECT * FROM market 
GROUP BY name 
ORDER BY timestamp DESCENDING 
HAVING COUNT(name) > 1 

Je sais comment faire le ORDER BY et GROUP BY:

db().select(
     db.market.ALL, 
     orderby=~db.market.timestamp, 
     groupby=db.market.name 
    ) 

mais je ne sais pas comment faire un compter dans une clause having même après avoir lu the section in the web2py book on the HAVING clause.

Répondre

2

La fonction count() renvoie une expression qui peut être utilisée à la fois comme champ dans la requête select et pour générer un argument pour le paramètre having de la requête. La section Grouping and counting du manuel web2py contient quelques conseils sur ce sujet.

Le code suivant donnera le résultat souhaité. Les objets lignes contiendront à la fois les objets market et leurs nombres de lignes respectifs.

count = db.market.name.count() 
rows = db().select(
    db.market.ALL, 
    count, 
    groupby=db.market.name, 
    orderby=~db.market.timestamp, 
    having=(count > 2) 
    )