【问题标题】:postgreSQL declare var inside if statement inside select statementpostgreSQL 在 select 语句中的 if 语句中声明 var
【发布时间】:2014-05-26 18:29:52
【问题描述】:

我有一个 mySQL 语句需要转换为 postgreSQL,但是当我在 postgreSQL 中运行以下 SQL 时,我得到 ERROR: syntax error at or near ":="

从我发现 := 似乎是在 postgreSQL 中声明 var 的方式。

SELECT  memberid, conseq, displayname, foldername, apiloginid, countryid, members.email
            FROM    (   SELECT  MemberID,
                                Position,
                                CreateDat,
                                @r:=IF(@m = MemberID, @r + 1, 1) AS conseq,
                                @m:= MemberID
                        FROM    memberevents,
                                (SELECT @r:= 0) r,
                                (SELECT @m:= 0) m
                        where position=1        
                        group by eventid        
                        ORDER BY CreateDat DESC
                    ) t, members
            where members.id=t.memberid     
            ORDER BY Conseq DESC
            LIMIT 3;

【问题讨论】:

  • 对于它的价值, := 分配给 Postgres 中的值而不是声明它。

标签: sql postgresql window-functions


【解决方案1】:

不需要这样的hack,只需使用窗口函数即可:

SELECT  memberid, conseq, displayname, foldername, apiloginid, countryid, members.email
FROM (   
  SELECT  MemberID,
          Position,
          CreateDat,
          row_number() over (partition by memberID order by createDat) as AS conseq
  FROM  memberevents
  where position=1        
  group by eventid        
) t
  JOIN members ON members.id=t.memberid     
ORDER BY Conseq DESC
LIMIT 3;

我不确定派生表中的group by,但我不知道 MySQL 如何实际使用派生表中的变量赋值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    相关资源
    最近更新 更多