0
我有一个非常具体的问题,我在这里有一年的领域。我需要能够把它们拉出来,并有一个查询条件来查看每一行,并选择年份最大但小于选择列表中选择的年份,因为我使用的连接有很多需要过滤的行。示例我在第1列中有1,2,3,4等行ID。但是我会有一些额外的1说5行1。我想过滤出所有额外的1,在另一列中没有最大年份。因此,需要使用ID列来查看哪些行可以比较,然后只保留年份列中年份最大的行。会有一些需要比较的分组。说出所有的2和3。仍然保持最大的一年,并筛选出那些最小的那些。Meridium SQL查询设计
下面是一种基准线查询,它还筛选我们不再处于服务状态的行。
SELECT CDFT_Test_Results_Primary_M."Equipment ID" "Equipment ID",
CDFT_Test_Results_Primary_M."Pass/Fail" "Pass/Fail",
CDFT_Test_Results_Primary_M."Failure Type" "Failure Type",
CDFT_Test_Results_Primary_M."Desired Interval (MO)" "Desired Interval (MO)",
CDFT_Test_Results_Primary_M."Task Description" "Task Description",
CDFT_Test_Results_Primary_M."Year" "Year",
CDFT_Test_Results_Primary_M."Site" "Site",
CDFT_Test_Results_Primary_M."Device Type" "Device Type",
CDFT_Test_Results_Primary_M."Execution Date" "Execution Date",
CDFT_Test_Results_Primary_M."Eqpt Manufacturer" "Eqpt Manufacturer",
CDFT_Test_Results_Primary_M."Eqpt Manufacturer Model Num" "Eqpt Manufacturer Model Num",
CDFT_Test_Results_Primary_M."Eqpt Manufacturer Serial Nu" "Eqpt Manufacturer Serial Nu",
CDFT_Test_Results_Primary_M."Decommission Year" "Decommission Year",
CDFT_Test_Results_Primary_M."Commission Year" "Commission Year",
CDFT_Test_Results_Primary_M."Equipment Key" "Equipment Key",
CDFT_Test_Results_Primary_M."Test Key" "Test Key"
FROM (! 'Personal[cmgray1]\Queries\CDFT Updated\CDFT Test Results Primary Multi Year Pre Non-Test') CDFT_Test_Results_Primary_M
WHERE (((CDFT_Test_Results_Primary_M."Year" <= CDFT_Test_Results_Primary_M."Decommission Year"
AND CDFT_Test_Results_Primary_M."Year" >= CDFT_Test_Results_Primary_M."Commission Year")
AND CDFT_Test_Results_Primary_M."Decommission Year" >= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl)
AND CDFT_Test_Results_Primary_M."Commission Year" <= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl))
OR (CDFT_Test_Results_Primary_M."Decommission Year" IS NULL AND CDFT_Test_Results_Primary_M."Commission Year" IS NULL)
OR (CDFT_Test_Results_Primary_M."Year" >= CDFT_Test_Results_Primary_M."Commission Year"
AND CDFT_Test_Results_Primary_M."Decommission Year" IS NULL
AND CDFT_Test_Results_Primary_M."Commission Year" <= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl))
OR (CDFT_Test_Results_Primary_M."Year" <= CDFT_Test_Results_Primary_M."Decommission Year"
AND CDFT_Test_Results_Primary_M."Decommission Year" >= (? :s :caption='Year Selection' :id=DecomYear :l='2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020' :excl)
AND CDFT_Test_Results_Primary_M."Commission Year" IS NULL))
正如您在下面看到的,如果按设备ID进行分组,您将在任务描述下获得多年。我希望能够挑选最大的组合并过滤掉其余的组合。例如,2009年应该被滤除,并且2013年的点仍然适用于类似设备ID的设备。
即使是我应该看的方向的想法也没有问题。我一直在这里搁浅了一段时间。 – ColdTeck
你可以用这种格式阅读你自己的查询吗?我不能。请以可读方式格式化,并将其降至核心问题。 –
其中rdbms全部3个?如果全部3个,你通常可以取出oracle和sql-server,因为mysql将成为函数特定方法中更受限制的方法之一。接下来我同意juergen格式化查询,以便它可读。我开始努力,但是不想让你做。接下来,您要求那些很可能知道系统功能的人提供建议,因此我们并不需要这些图像来告诉我们它们是什么。最后应包括示例数据和期望的结果。但是,听起来像你需要重新考虑说明,以最大年份小于输入变量cte与row_number – Matt