我在mysql中有一个结构如下的表
id int pk
client varchar
dateOne date
descOne float
material varchar
dateTwo date
descTwo float
下面是表中数据的一些示例
client dateOne descOne material dateTwo descTwo
1000009999 30.09.2020 60 Null 0
1000009999 18.08.2020 70 Null 0
1000009999 06.07.2018 50 Null 0
1000009999 30.09.2020 60 1000004 30.09.2020 60
1000009999 30.09.2020 60 1000004 17.11.2020 55
1000009999 30.09.2020 60 1000004 21.03.2022 60
1000009999 30.09.2020 60 1000004 19.04.2022 60
1000009999 30.09.2020 60 1000002 30.09.2020 60
1000009999 30.09.2020 60 1000002 17.11.2020 55
1000009999 30.09.2020 60 1000002 21.03.2022 60
1000009999 30.09.2020 60 1000002 19.04.2022 60
1000009999 30.09.2020 60 1000001 30.09.2020 60
1000009999 30.09.2020 60 1000001 17.11.2020 55
1000001163 30.09.2020 60 Null 0
1000001163 18.08.2020 70 Null 0
1000001163 06.07.2018 50 Null 0
1000001163 30.09.2020 60 1000004 30.09.2020 60
1000001163 30.09.2020 60 1000004 17.11.2020 55
1000001163 30.09.2020 60 1000004 21.03.2022 60
1000001163 30.09.2020 60 1000004 19.04.2022 60
1000001163 30.09.2020 60 1000002 30.09.2020 60
1000001163 30.09.2020 60 1000002 17.11.2020 55
1000001163 30.09.2020 60 1000002 21.03.2022 60
1000001163 30.09.2020 60 1000002 19.04.2022 60
1000001163 30.09.2020 60 1000001 30.09.2020 60
1000001163 30.09.2020 60 1000001 17.11.2020 55
我需要构建一个执行以下检查的SQL查询:
客户退货、物料退货;
如果填写了“material”字段,则根据“dateTwo”返回最近的“descTwo”
如果“material”字段为“null”,则根据“descOne”返回最近的“descOne "
以下是预期结果的示例:
client dateOne descOne material dateTwo descTwo
1000009999 30.09.2020 60 Null 0
1000009999 30.09.2020 60 1000004 19.04.2022 60
1000009999 30.09.2020 60 1000002 19.04.2022 60
1000009999 30.09.2020 60 1000001 17.11.2020 55
1000001163 30.09.2020 60 Null 0
1000001163 30.09.2020 60 1000004 19.04.2022 60
1000001163 30.09.2020 60 1000002 19.04.2022 60
1000001163 30.09.2020 60 1000001 17.11.2020 55
1条答案
按热度按时间xtfmy6hx1#
Please Please Please使用ISO-8601日期表示法,例如
YYYY-MM-DD
,它使回答问题容易得多...由于您提供了无效的日期,我使用字符串和
STR_TO_DATE()
编写了一个演示。演示:https://dbfiddle.uk/JyVlxebZ