我有一个表RESULTS
,其中包含8个单独的数字列,这些列可以在[1,47]和date_id
的范围内,即fk到日期表。
我想要的是找到所有行和数字属性的最高值(我设法做到的),然后找到该值出现时的最新日期(没有重复日期)。
第二个问题对我来说似乎很残酷。
该表与第一个表(结果)相同,但我需要找到数字1,2,3,4和5出现次数最多的行。
因此,如果一行的值为1 ,35, 5, 7, 43, 22, 3
且第二行32, 2, 3, 21, 25, 40, 1
,我需要它返回给我第一行,因为它包含[1,5
]范围内的3个值
date_id
)
第一个查询应返回第7行或第8行的日期,具体取决于哪个日期更晚,因为这两行都包含值46,因为这是表中的最高值。
第二个查询应该返回第10行,其中[1,5
]范围内有3个值(4,5,3
)。如果在该范围内有多个行具有3个值,则应将它们全部返回。
希望能搞清楚。
答案 0 :(得分:0)
您没有指定哪个RDBMS,所以我将假设SQL Server:
select top 1
date_id
from (
select
date_id,
( case when Col1 between 1 and 5 then 1 else 0 end
+ case when Col2 between 1 and 5 then 1 else 0 end
+ case when Col3 between 1 and 5 then 1 else 0 end
+ case when Col4 between 1 and 5 then 1 else 0 end
+ case when Col5 between 1 and 5 then 1 else 0 end
) as Value
from RESULTS
) d
order by Value desc
答案 1 :(得分:0)
我找到了第一个使用Oracle函数GREATEST的解决方案。
select *
from ( select greatest(result.no1, result.no2, result.no3, result.no4, result.no5, result.no6, result.no7,result.no8)
, date.date
from result
join date
on date.id=result.date_id
order by 1 desc, 2 desc
)
where rownum=1;