sql
  • sqlalchemy
  • flask-sqlalchemy
  • 2017-04-10 37 views 0 likes 
    0

    这是表:如何在一列上显示group_by,在另一列上显示order_by,并在第三个不同列上显示过滤器?

    class APIBackoffInterrupt(Base): 
        """ 
        When a user calls a Google API method, and it returns 403 or 429, we should apply an exponential backoff 
        """ 
        __tablename__ = 'backoff_interrupt' 
        _id = Column(Unicode(36), primary_key=True) 
        user_id = Column(Unicode(36)) 
        date_created_utc = Column(DateTime) 
        expiry_date_utc = Column(DateTime, nullable=True) 
        exponent = Column(Integer, default=-1) 
    

    我喜欢让所有独特user_id,由date_created_utc(DESC)排序,其中expiry_date_utc是<当前UTC现在。

    我该怎么做?

    +0

    添加一些示例表数据和预期的结果 - 以及格式化文本。 – jarlh

    回答

    0
    q1 = (session.query(APIBackoffInterrupt, 
             func.rank().over(order_by=desc(APIBackoffInterrupt.date_created_utc), 
                 partition_by=APIBackoffInterrupt.user_id).label('rnk')) 
         ).subquery() 
        q2 = (session.query(q1) 
          .filter(q1.c.rnk == 1) 
          .filter(q1.c.expiry_date_utc < datetime.datetime.utcnow()) 
         ) 
    
    0
    select distinct user_id 
    from backoff_interrupt 
        where expiry_date_utc <getdate() 
    order by date_created_utc desc 
    

    检查这一项: 更新:

    select * into #temp from backoff_interrupt 
    where expiry_date_utc <getdate() 
    order by date_created_utc desc 
    
        select distinct user_Id from #temp 
    
    drop #temp 
    
    +0

    ORDER BY无效。当选择DISTINCT时,您只可以选择ORDER BY项目。 – jarlh

    +0

    检查更新版本 – Mehr

    +0

    我认为这是错误的。必须使用窗口功能。生病加我自己的解决方案 – nubela

    相关问题