Mysql 用于比较表中比较列值的行的SQL查询

Mysql 用于比较表中比较列值的行的SQL查询,mysql,sql,Mysql,Sql,我已将一个大型CSV文件导入到表中。该表的示例如下所示 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 S

我已将一个大型CSV文件导入到表中。该表的示例如下所示

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查询,我们将不胜感激。

您需要使用sql
MAX()
函数和
分组依据
名称

试着这样做:

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

另外,请看另一个Stackoverflow问答,它的查询与您感兴趣的查询类似:

您需要使用SQL
MAX()
函数和
分组依据
名称

试着这样做:

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

另外,请看另一个Stackoverflow问答,它的查询与您感兴趣的查询类似:

我认为这应该适合您:

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'   

我认为这应该适合你:

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'   

我将左眼和右眼分为两个表表表l和表r,然后使用(从
表l
中选择
表l
*,其中
表l
灵敏度*10
>10)并集获得非空值(从
表r
中选择
表r
,其中
表r
敏感度*10
>10),但在此之后,如果我使用join比较和提取字段,它会给我笛卡尔乘积。我已将左眼和右眼分为两个表表l和表r,然后使用(从
表l
中选择
表l
*,其中
表l
灵敏度*10
>10)联轴节(从
表r
中选择
表r
灵敏度*10
>10)但是在这之后,如果我用join比较并提取字段,它会给我笛卡尔乘积对不起,它不起作用,它给了我一行,它的点和字段是相同的。但是我需要比较左眼和右眼(灵敏度值)其中点域和日期相同。观察图像中的第1行和第4行。查询仍然显示具有相同点域的行,但不与其他行进行比较。
MAX()
正在获取总体
max
。这就是只返回一行的原因。我仍在试图找出如何为每个人获取
max
。非常确定
max(sensitivty*10)
需要移动到其他地方,可能是在子查询中。我正在尝试,但SQL不是最好的,抱歉…抱歉,它不起作用,它给了我一行,其中点和字段相同。但我需要比较左眼和右眼(敏感度值)其中点域和日期相同。观察图像中的第1行和第4行。查询仍然显示具有相同点域的行,但不与其他行进行比较。
MAX()
正在获取总体
max
。这就是只返回一行的原因。我仍在试图找出如何为每个人获取
max
。非常确定
max(sensitivty*10)
需要移动到其他地方,可能是在子查询中。我正在尝试,但SQL不是最好的,对不起…@BlueFoots我猜查询不太正确,我在您的查询中看不到
字段=点
。您能建议吗?thankshow如果R和L的眼睛在自己的表中,请不要使用
where
子句?@Timperson他是右..字段和单行的点不必相同..它们应该匹配对应的左眼或右眼如果你去掉
WHERE
子句怎么样?@bluefeet我猜查询不太正确,我在你的查询中看不到WHERE
field=point
。你能建议吗?thankshow关于去掉
WHERE
子句吗e如果R和L的眼睛在他们自己的表中?@Timperson他是对的。单行的字段和点不必相同。它们应该匹配相应的左眼或右眼。如果你去掉
WHERE
子句怎么样?我将左表和右表分为两个,并使用此查询。解决了问题。谢谢tim peterson。还有bluefeetI sepa分为左右两个表并使用此查询..算出了..谢谢tim peterson.和BlueFoots