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)

のみをグループ化してDate()いるYear()ため、の値は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 に答える