2013-01-11 118 views
0

我有以下查询。MySQL查询跳转记录

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 

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

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

你只在Date()Year()分组结果的COD_VENDED的价值:

问题是在这个SQL Fiddle

+0

你能否详细说明跳楼?你什么意思? – Taryn

+0

那么,如果你看看SQLFiddle上的表格,你会发现1月3日有记录。当我运行查询时,Jan的3返回0.这种情况很多。 –

回答

1

看来,问题是你内心的子查询复制不会是恒定的。

然后当你到您的查询的下一部分您筛选仅记录:

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 with Demo

+0

只是一个问题,我试图将IMPORTE更改为包含在SQL小提琴中的IMPORTE_GR,而我不能。你能看到任何错误吗? –

+1

它的工作原理 - http://sqlfiddle.com/#!2/253a8/10 – Taryn

+0

非常感谢! –