PARTITIONby问题

各位大神,在处理数据时有一个问题一直没想明白,就是指定itemid具体值时,查询出来数据是正确的,但是不指定,就为空 该怎么改

WITH RECURSIVE date_range AS (

  SELECT '2023-08-31' AS date

  UNION ALL

  SELECT DATE_ADD(date, INTERVAL 1 DAY)

  FROM date_range

  WHERE DATE_ADD(date, INTERVAL 1 DAY) <= CURDATE()

),

A AS (select date_range.date,IFNULL(日报.现金收入,0) AS 现金收入,银行收入,现金支出,银行支出, itemid ,pitemid from  date_range

LEFT JOIN 日报

on date_range.date = 时间 

)

SELECT D.date,上日现金,上日银行,上日余额,累计现金,累计银行,累计余额 FROM

(

SELECT

    date,

    LAG(累计现金) OVER ( order  BY date) AS 上日现金,

    LAG(累计银行) OVER (  order  BY date) AS 上日银行,

    LAG(累计余额) OVER ( order  BY date) AS 上日余额

FROM 

(SELECT

       date,

      SUM(现金收入) OVER (PARTITION by itemid order  BY date) AS 累计现金,

SUM(银行收入) OVER (PARTITION by itemid order  BY date) AS 累计银行,

SUM(现金收入 + 银行收入 - 现金支出 - 现金支出) OVER (PARTITION by itemid order  BY date) AS 累计余额

      from A 

WHERE date > '2023-08-30' 

and

itemid = '${name}') C)F,

(SELECT

       date,

      SUM(现金收入) OVER (PARTITION by itemid order  BY date) AS 累计现金,

SUM(银行收入) OVER (PARTITION by itemid order  BY date) AS 累计银行,

SUM(现金收入 + 银行收入 - 现金支出 - 现金支出) OVER (PARTITION by itemid order  BY date) AS 累计余额

      from A 

WHERE date > '2023-08-30' 

and

itemid = '${name}')D

WHERE F.DATE = D.DATE 

AND

DATE_FORMAT(D.DATE, '%Y-%m') =  DATE_FORMAT(CURDATE(), '%Y-%m')image.png

FineReport 帆软用户A5K1Xo5JDb 发布于 2023-10-30 15:42
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
快乐星光Lv5中级互助
发布于2023-10-30 15:48(编辑于 2023-10-30 15:49)

试试把

and

itemid = '${name}'

改为

   ${if(len(name)=0,"1=2"," and itemid = '"+name+"'")}

如果需要name为空时该条件查询所有就

${if(len(name)=0,""," and itemid = '"+name+"'")}

最佳回答
0
Z4u3z1Lv6专家互助
发布于2023-10-30 15:50

这不写的=嘛

改成  

WHERE date > '2023-08-30' 

${if(len(name)==0,""," and itemid ='"+name+"'")} group by date

image.png

  • 2关注人数
  • 141浏览人数
  • 最后回答于:2023-10-30 15:50
    请选择关闭问题的原因
    确定 取消
    返回顶部