2013-02-05 39 views
0

我试图在(entrydate列中的最大日期)和(entrydate列中的最大日期-15days)之间获取数据!SQL错误(1111):组函数无效使用

表1:完全有953rows enter image description here

表2:完全有400rows enter image description here

我得到这个错误,请帮助我!

Select 
o_material_transaction_inward.Mat_Code, 
s_material_details.Mat_Spec, 
s_material_details.Mat_Make, 
o_material_transaction_inward.Sup_Name, 
o_material_transaction_inward.Entry_Date, 
o_material_transaction_inward.DC_qty, 
o_material_transaction_inward.Received_qty, 
    from 
o_material_transaction_inward 
    join 
s_material_details 
    on 
s_material_details.Mat_Code=o_material_transaction_inward.Mat_Code and s_material_details.Mat_Group_Id=o_material_transaction_inward.Mat_Group_id 
    where 
o_material_transaction_inward.Entry_Date between Max(o_material_transaction_inward.Entry_Date) and Max(o_material_transaction_inward.Entry_Date - 15) 

回答

2

更新:固定BETWEEN断言:

它不工作的原因是最低值必须在BETWEEN谓词的第一个值,所以为了得到那些行具有最大入境日期间entry_date两个表 - 15和最大入境日期试试这个:

SELECT 
    o.Mat_Code, 
    s.Mat_Spec, 
    s.Mat_Make, 
    o.Sup_Name, 
    DATE_FORMAT(o.Entry_Date, '%Y-%m-%d') AS Entry_Date, 
    o.DC_qty, 
    o.Received_qty 
FROM o_material_transaction_inward AS o 
INNER JOIN s_material_details  AS s ON s.Mat_Code  = o.Mat_Code 
WHERE o.Entry_Date BETWEEN ((SELECT Max(Entry_Date) 
          FROM o_material_transaction_inward) - 15) 
         AND (SELECT Max(Entry_Date) 
          FROM o_material_transaction_inward) ; 

SQL Fiddle Demo

+0

0rows,我使用了具有而不是介于两者之间,但它提取除我预期的15行之外的所有行。 –

+0

@RanjitKumar - 您可以添加这两个表'o_material_transaction_inward','s_material_details'的一些示例数据以及您希望从这两个表中获得的预期结果。这将非常有帮助。谢谢。 –

+0

@Gamal肯定要等下去 –

0

尝试:

Select 
o_material_transaction_inward.Mat_Code, 
s_material_details.Mat_Spec, 
s_material_details.Mat_Make, 
o_material_transaction_inward.Sup_Name, 
o_material_transaction_inward.Entry_Date, 
o_material_transaction_inward.DC_qty, 
o_material_transaction_inward.Received_qty, 
    from 
o_material_transaction_inward 
    join 
s_material_details 
    on 
s_material_details.Mat_Code=o_material_transaction_inward.Mat_Code and s_material_details.Mat_Group_Id=o_material_transaction_inward.Mat_Group_id 
    having 
o_material_transaction_inward.Entry_Date between Max(o_material_transaction_inward.Entry_Date) and Max(o_material_transaction_inward.Entry_Date - 15) 

(见MySQL: Invalid use of group function接受的答案为where VS having的解释)

+0

它获取所有行期望15行! –

+0

SQL错误(1054):'having子句'中的未知列'o_material_transaction_inward.Entry_Date' –

0

这应该工作:受影响的输出

SELECT 
    o.Mat_Code, 
    s.Mat_Spec, 
    s.Mat_Make, 
    o.Sup_Name, 
    o.Entry_Date, 
    o.DC_qty, 
    o.Received_qty, 
FROM o_material_transaction_inward AS o 
INNER JOIN s_material_details  AS s ON s.Mat_Code  = o.Mat_Code 
             AND s.Mat_Group_Id = o.Mat_Group_id 
WHERE o.Entry_Date BETWEEN (SELECT Max(Entry_Date) 
          FROM o_material_transaction_inward) 
         AND (SELECT Max(Entry_Date) 
          FROM o_material_transaction_inward) - 15); 
+0

没有错误并且还有0行影响输出。它没有获取(最大日期)和(最大日期-15)之间的数据 –

+0

选择最大(入境日期)我用下面的查询,但它没有奏效。 (SELECT DATE_SUB(Max(Entry_Date),INTERVAL 15 DAY)FROM o_material_transaction_inward)在最后一行 –

相关问题