呵呵又是MySQL转PostgreSQL的问题
这次是Group by得问题了
MySQL的Group by 后面分组的列不一定要和查询的列一致 
但是PostgreSQL的Group by是必须一致的
这是原来
SELECT u.UserCD ,SUBSTRING(OperationDT,9,2) AS DateDay
FROM mytable
GROUP BY SUBSTRING(OperationDT,1,10)
这句的意思是我想分组SUBSTRING之后的值  MySQL中不会出错的可是在PostgreSQL中  由于我查询中要查SUBSTRING(OperationDT,9,2) AS DateDay
所以GROUP BY中必须要写OperationDT  这样就不是我想要的结果了
顺便说下OperationDT是时间  YYYY-MM-DD hh:mmss格式的最好有简单的方法 SQL文别改太长

解决方案 »

  1.   

    这句的意思是我想分组SUBSTRING之后的值 MySQL中不会出错的
    不是标准的 SQL语句SELECT u.UserCD ,to_char(OperationDT,'YYYY-MM-DD') AS DateDay
    FROM mytable
    GROUP BY  u.UserCD ,to_char(OperationDT,'YYYY-MM-DD')
      

  2.   

    SELECT u.UserCD ,SUBSTRING(OperationDT,9,2) AS DateDay
    FROM mytable
    GROUP BY u.UserCD,SUBSTRING(OperationDT,1,10)加上  u.UserCD,或者SELECT min(u.UserCD) ,SUBSTRING(OperationDT,9,2) AS DateDay
    FROM mytable
    GROUP BY SUBSTRING(OperationDT,1,10)
      

  3.   

    楼上2位大哥  都不可以  只要SELECT中有SUBSTRING(OperationDT,9,2)这个
    在GROUP BY 中就必须要有OperationDT  错误提示就是这样的  我的版本是8.4的
      

  4.   

    贴记录及要求结果出来看看SELECT   u.UserCD   ,to_char(OperationDT, 'YYYY-MM-DD ')   AS   DateDay 
    FROM   mytable 
    GROUP   BY     u.UserCD   ,to_char(OperationDT, 'YYYY-MM-DD ')
      

  5.   

    我是日文的
    select UserCD,to_char(OperationDT, 'DD') As DateDay from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD')错误如下
    ERROR:  列"daily_reports.operationdt"はGROUP BY句で出現しなければならないか、集約関数内で使用しなければなりません
    LINE 1: select UserCD,to_char(OperationDT, 'DD') As DateDay from dai...
                                  
    ********** エラー **********
    ERROR: 列"daily_reports.operationdt"はGROUP BY句で出現しなければならないか、集約関数内で使用しなければなりません
    SQLステート:42803
    文字:23意思就是operationdt是必需的,这么写就没错了 但是不是我要的结果了  
    select UserCD,to_char(OperationDT, 'DD') As DateDay from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD'),OperationDT
      

  6.   

    两个SQL语句不一样吗?
    select UserCD,to_char(OperationDT, 'DD') As DateDay from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD')select UserCD,to_char(OperationDT, 'DD') As DateDay from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD'),OperationDTTRY:
    select usercd,DATE_PART('DAY',TO_DATE(DateDay,'YYYY-MM-DD'))
    from (
    select UserCD,to_char(OperationDT, 'YYY-MM-DD') As DateDay from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD'),OperationDT) a
      

  7.   

    哦 原来要一致阿  然后程序里改  明白了...
    那假如 select后面还有其他字段  但是不想GROUP BY 他们  怎么办
    select UserCD,to_char(OperationDT, 'DD') As DateDay,Memo,Message from daily_reports 
    GROUP BY UserCD,to_char(OperationDT, 'YYYY-MM-DD'),OperationDT
      

  8.   

    那假如 select后面还有其他字段  但是不想GROUP BY 他们  怎么办标准的SQL语句并不支持这种操作,这是MYSQL的特点。 对于其它字段你需要用 MIN(),MAX() 等函数。或者使用JOIN 查询。 具体要看你的需求是什么。