0

我有以下查询。

SELECT month(DMY) Month, 
  Year(DMY) Year, 
  Date(DMY) Date,
  COD_VENDED,
  @running_total := @running_total + Coalesce(TotalImport, 0) as TotalImport
from
(
  SELECT Days.dmy,
    g.COD_VENDED,
    TotalImport
  FROM Days
  left join
  (
    select FECHA_EMIS,
      COD_VENDED,
      sum(IMPORTE) TotalImport
    from GVA12
    group by Date(FECHA_EMIS), Year(FECHA_EMIS)
  ) g
    on date(Days.DMY) = date(g.FECHA_EMIS)
    and g.COD_VENDED='EX'
    and Month(g.FECHA_EMIS)=Month(curDate())
    and Year(g.FECHA_EMIS)=Year(curDate())
  WHERE month(Days.dmy)=Month(curDate())
) src, (SELECT @running_total := 0 AS dummy) dummy

问题是它在数据库中跳跃记录。

此SQL Fiddle中复制了该问题

4

1 回答 1

1

看来问题出在您的内部子查询上:

select FECHA_EMIS,
  COD_VENDED,
  sum(IMPORTE) TotalImport
from GVA12
group by Date(FECHA_EMIS), Year(FECHA_EMIS)

您只是对 the 进行分组,Date()因此Year()the 的值COD_VENDED不会保持不变。

然后,当您进入查询的下一部分时,您仅过滤以下记录:

 g.COD_VENDED='EX'

因此,如果子查询返回的值不是,EX那么它们将被过滤掉。

您可能需要考虑COD_VENDED在子查询中进行分组:

SELECT month(DMY) Month, 
  Year(DMY) Year, 
  Date(DMY) Date,
  COD_VENDED,
  @running_total := @running_total + Coalesce(TotalImport, 0) as TotalImport
from
(
  SELECT Days.dmy,
    g.COD_VENDED,
    TotalImport
  FROM Days
  left join
  (
    select FECHA_EMIS,
      COD_VENDED,
      sum(IMPORTE) TotalImport
    from GVA12
    group by Date(FECHA_EMIS), Year(FECHA_EMIS), COD_VENDED
  ) g
    on date(Days.DMY) = date(g.FECHA_EMIS)
    and g.COD_VENDED='EX'
    and Month(g.FECHA_EMIS)=Month(curDate())
    and Year(g.FECHA_EMIS)=Year(curDate())
  WHERE month(Days.dmy)=Month(curDate())
) src, (SELECT @running_total := 0 AS dummy) dummy

请参阅带有演示的 SQL Fiddle

于 2013-01-11T19:27:19.570 回答