用于比较多行和多列值的SQL查询

时间:2014-07-29 19:31:32

标签: sql

我有一个表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个值

编辑:对不起,我有点累了。发现错误。 以下是结果的示例(前两列是id和date_id

results table

第一个查询应返回第7行或第8行的日期,具体取决于哪个日期更晚,因为这两行都包含值46,因为这是表中的最高值。

第二个查询应该返回第10行,其中[1,5]范围内有3个值(4,5,3)。如果在该范围内有多个行具有3个值,则应将它们全部返回。 希望能搞清楚。

2 个答案:

答案 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;