2012-05-06 73 views
1

我已将大型CSV文件导入到表中。该表的样品看起来像这样用于比较列值的表的行比较的SQL查询

name,  eye,point,field,date,seconds,sensitivity*10,slope,intercept,T*1000 

NESSA SONIA ,R,6,4,08-04-09,32658845,160,1.062300e+001,62538, 1282 
NESSA SONIA ,R,6,5,20-05-09,36288632,20, 5.360101e+000,64036, 771 
NESSA SONIA ,R,6,6,02-12-09,53223062,60, 3.425260e+000,64590, 767 
NESSA SONIA ,L,6,4,08-04-09,32658922,230,4.629489e+000,64382, 582 
NESSA SONIA ,L,6,5,20-05-09,36288515,170,2.805373e+000,64901, 511 
NESSA SONIA ,L,6,6,02-12-09,53223059,220,3.528252e+000,64694, 1022 

我要比较右眼和左眼“灵敏度* 10”的价值观,以匹配点和字段值,并提取最高(我指的是行)。

例如,我必须比较第一行和第四作为点,字段和日期相同,并提取第四个灵敏度最高。我有一个巨大的文件,需要提取所有值。任何人都可以帮助与SQL查询,将不胜感激。

+0

我已经分居左,右击t眼睛分为两个表格l和表格r,然后得到的值不为空(从'表格'中选择'表格1'。*' 其中'表格1'。 '灵敏度* 10'> 10) 工会 (选择'表r'。*从'表r' 其中'表r'。'灵敏度* 10'> 10),但是在这之后,如果我比较和使用提取的字段加入,它给我笛卡尔产品 – user1375481

回答

1
(select `table l`.* from `table l`, `table r` 
where `table l`. `sensitivity*10` > 10 and `table l`.`sensitivity*10`>`table r`.`sensitivity*10`) 

union 

(select `table r`.* from `table r`, `table l` 
where `table r`. `sensitivity*10` > 10 and `table r`.`sensitivity*10`>`table l`.`sensitivity*10`) 
+0

我分成左右两个表,并使用此查询..计算出来..谢谢蒂姆彼得森。和bluefeet – user1375481

0

您需要使用SQL MAX()功能和GROUP BY名。

尝试这样:

SELECT * 
FROM (
    SELECT point, field, MAX(sensitivty*10) AS max 
    FROM table 
    GROUP BY 
      name 
    ) tbl 
JOIN table 
ON  table.point = tbl.field 

而且,看看这个其他#1 Q &一个具有查询类同一个你感兴趣的是:SQL Group by & Max

+0

对不起,它没有工作,它给了我有点和场相同的单行。但我需要比较左眼和右眼(敏感度值),其中点字段和日期相同。观察图像中的第1行和第4行 – user1375481

+0

仍然查询显示具有相同点和字段的行,但它不与其他行进行比较 – user1375481

+0

是的,'MAX()'获得整体'max'。这就是为什么只有一行返回。我仍然试图找出如何为每个人获得最大值。很确定'MAX(sensitivty * 10)'需要移动到别的地方,也许在子查询中。我试图但不是最好的在SQL,对不起... –

0

我想这应该工作你:

select if(t1.sensitivity*10 > t2.sensitivity*10,t1.sensitivity*10,t2.sensitivity*10) as col1 
from table t1 
inner join table t2 
    on t1.field = t2.field 
    and t1.point = t2.point 
    and t1.date = t2.date 
where t1.eye ='R' and t2.eye ='L' 
+0

没有工作。它给我NULL行 – user1375481

+0

@bluefeet我猜查询不是很正确,我没有看到你的查询在哪里'field = point'。你能建议吗?谢谢 –

+0

如果R和L的眼睛在他们自己的表中,那么如何摆脱'WHERE'子句? –