Sql 查找列的最大值,如果该值为零,则在同一列中更新该值

Sql 查找列的最大值,如果该值为零,则在同一列中更新该值,sql,plsql,Sql,Plsql,我有如下所示的表格(附上表格图像) TableA:ID1、ID2和Date列是表A的主键 ID1|ID2| QTY| Date 1. 11. 10. 01/06/2020 2. 22. 0. 08/06/2020 3. 33. 10. 15/06/2020 4. 44. 0. 22/06/2020 5. 55. 10. 29/06/2020 我想找到一个月的最大数量值,然后将该最大值更新到数量列中,数量列中的值为零 预期结果 ID1|ID2| QT

我有如下所示的表格(附上表格图像)

TableA:ID1、ID2和Date列是表A的主键

ID1|ID2| QTY| Date
 1.  11. 10.   01/06/2020
 2.  22.  0.    08/06/2020
3.   33.  10.  15/06/2020
4.   44.  0.   22/06/2020
5.   55.  10.  29/06/2020
我想找到一个月的最大数量值,然后将该最大值更新到数量列中,数量列中的值为零

预期结果

ID1|ID2| QTY| Date
1  | 11 |10 |  01/06/2020
2  | 22 | 10|  08/06/2020
3  | 33 | 10|  15/06/2020
4  | 44 | 10|  22/06/2020
5  | 55 | 10|  29/06/2020
请注意:此处的“日期”列始终不必是星期一的日期。如果任何月份的所有周都是星期一,则零为数量。我想从查询中排除这些记录


您可以帮助我如何使用PLSQL执行此操作。

您可以使用相关子查询:

update t
    set qty = (select max(t.qty) 
               from t t2
               where trunc(t2.date, 'MON') = trunc(t.date, 'MON')
    where qty = 0;

您可以使用相关子查询:

update t
    set qty = (select max(t.qty) 
               from t t2
               where trunc(t2.date, 'MON') = trunc(t.date, 'MON')
    where qty = 0;

感谢您的回复Gordon。这里的数据始终不必是星期一的日期。如果任何月份的所有周的数量都为零。我想从我的查询中排除这些记录。有什么办法可以实现吗?@user1917985。“星期一”和什么有什么关系?
trunc()
将截断到月初。@谢谢戈登。@user1917985。如果这解决了你的问题,你可以考虑接受答案。我已经接受了答案“戈登,你所提供的解决方案是有效的。谢谢你的答复戈登。这里的数据总是不必是星期一的日期。如果任何月份都有0个星期作为QTY。我想排除我的查询中的那些记录。有什么办法可以实现吗?@user1917985。“星期一”和什么有什么关系?
trunc()
将截断到月初。@谢谢戈登。@user1917985。如果这解决了你的问题,你可以考虑接受答案。我已经接受了答案:戈登,你提供的解决方案正在工作。谢谢。