Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询根据所选日期查找值,但如果所选日期没有值,则将查找最新值_Php_Mysql_Sql_Greatest N Per Group - Fatal编程技术网

Php SQL查询根据所选日期查找值,但如果所选日期没有值,则将查找最新值

Php SQL查询根据所选日期查找值,但如果所选日期没有值,则将查找最新值,php,mysql,sql,greatest-n-per-group,Php,Mysql,Sql,Greatest N Per Group,我想获取当前日期的分支值,但如果当前日期没有值,则获取其最新读数的值 例如,所选日期为2013年9月29日 我有三个分支 其中两家分行的销售额为2013年9月29日 一个分支没有编码值,但此分支的最新值日期为2013年8月30日 换句话说, Branch 1 - Sep 29 - value is 150 Branch 2 - Sep 29 - value is 150 Branch 3 - Sep 29 - value is 0 我不能只做150+150+0=300 我要做的是: Branc

我想获取当前日期的分支值,但如果当前日期没有值,则获取其最新读数的值

例如,所选日期为2013年9月29日

我有三个分支

其中两家分行的销售额为2013年9月29日

一个分支没有编码值,但此分支的最新值日期为2013年8月30日

换句话说,

Branch 1 - Sep 29 - value is 150
Branch 2 - Sep 29 - value is 150
Branch 3 - Sep 29 - value is 0
我不能只做150+150+0=300

我要做的是:

Branch 1 - Sep 29 - value is 150
Branch 2 - Sep 29 - value is 150
Branch 3 - Sep 29 - value is 0, so find the latest reading, system finds August 30 with value 250.
现在我可以做150+150+250=550

目前,我有以下SQL查询:

SELECT 
    user_id, product_code, uom, inventory_date, account_id, branch_id, beginning_inventory 

FROM 
    inventory_mgmt_uploads 

WHERE 
    user_id = '137'
    AND product_code = 'GRO_AL'
    AND uom = 'box'
    AND account_id = '3'
    AND inventory_date <= '2013-09-29'

ORDER BY
    inventory_date
上述查询的结果是:

现在我想要达到的是这个结果:

我尝试的是以下查询:

SELECT 
    user_id, product_code, uom, inventory_date, account_id, branch_id, beginning_inventory 

FROM 
    inventory_mgmt_uploads 

WHERE 
    user_id = '137'
    AND product_code = 'GRO_AL'
    AND uom = 'box'
    AND account_id = '3'
    AND inventory_date <= '2013-09-29'

GROUP BY
    branch_id

ORDER BY
    inventory_date
但它给了我:

即使我尝试按分支机构id描述或库存日期描述进行订单,我仍然无法获得所需的输出。 你知道什么是正确的查询吗?蒂亚

试试这个:

Select * from inventory_mgmt_uploads outerimu 
INNER JOIN 
  (  SELECT 
        user_id, MIN(inventory_date) as minInvent, branch_id as Bid, MIN(beginning_inventory) as Binvent

    FROM 
        inventory_mgmt_uploads 

    WHERE 
        user_id = '137'
        AND product_code = 'GRO_AL'
        AND uom = 'box'
        AND account_id = '3'
        AND inventory_date <= '2013-09-29'

    GROUP BY
        branch_id
) as tempTab
    on (tempTab.user_id = outerimu.user_id and tempTab.minInvent=outerimu.inventory_date AND tempTab.Binvent =outerimu.beginning_inventory and tempTab.Bid= outerimu.branch_id)
    ORDER BY
    inventory_date
您也可以尝试以下方法:

SELECT a.USER_ID, a.PRODUCT_CODE, a.UOM, MAX(a.INVENTORY_DATE), a.ACCOUNT_ID, a.BRANCH_ID, (
  SELECT BEGINNING_INVENTORY FROM test 
  WHERE user_id = a.user_id
  AND product_code = a.product_code
  AND uom = a.uom
  AND inventory_date = MAX(a.inventory_date)
  AND account_id = a.account_id
  AND branch_id = a.branch_id
) as BEGINNING_INVENTORY
FROM test as a
WHERE a.INVENTORY_DATE <= '2013-09-29'
GROUP BY a.USER_ID, a.product_code, a.uom, a.account_id, a.branch_id

Sashi Kant提到的查询工作正常,因为您有顺序数据,库存随日期减少。如果数据被置乱,上述方法将无法提供正确的数据。

您能为我们介绍一下吗simplicity@Romesh,当然,这是我的模式检查:请告诉我它是否正确谢谢,但是您的日期和开始库存值错误,请查看上面我想要的结果。。还请注意,我将表中的值302改为316。您的查询有效!但是,如果你能添加更多的解释,让我们更好地理解它,那就更好了!在上面的查询中,我按除inventory\u date字段之外的所有字段进行了分组,并为其选择了最大值。对于其余字段,它将返回所有这些分组字段与最大库存日期字段的组合,然后我使用了一个内部查询来获取使用最大库存日期返回的特定数据的开始库存。您可以尝试更改组以获得所需的结果。在上面的查询中,它将为每个字段组合返回一行,因为我已将所有字段分组,库存日期和开始库存除外。也许这就是为什么它会产生更多的结果。