2016-11-30 42 views
-1

的两排我想编写一个查询,将比较数据的单个列如何同桌

,所以我有结构的表像

S.no **SampleNo** 
100  0 
A   13 
B   25 
C   38 

之间所以,现在的最终用户比较通过一些随机样本编号例如11.12。 现在我需要比较这个传递的数字与sampleNo列。 现在在这种情况下11.12介于0和13之间,所以我需要显示A作为查询的输出。

我希望你能理解这个问题。

我需要写像

查询得到S.no其中passedValue> 0和< = 13。并输出应为100

同样,如果用户通过24作为输入,然后我的查询应该变得像 得到S.no其中passedValue> 13和< = 25。和输出应该是一个

期待您的解决方案,并在此先感谢帮助..

+1

您的问题不完整。输入为100时的预期结果是什么?而当输入是-1? – axiac

+0

输入将在采样数量的范围内。因此,用户必须在范围内通过输入以进行可能的比较。 – Roy

回答

1

这个查询将返回的行用最小的SampleNo比passedValue大。

select * 
from demo1 
where passedValue <= SampleNo 
order by SampleNo 
limit 1 

与字面执行的传递值:

SQL>select * 
SQL&from demo1 
SQL&where 11.12 <= SampleNo 
SQL&order by SampleNo 
SQL&fetch first 1 row only; 
sno   sampleno 
========== =========== 
A     13 

        1 row found 

而且随着参数的第一值:我不是使用MySQL

SQL>create table demo1 (sno varchar(10), sampleno int); 
SQL>insert into demo1 values ('100',0); 
SQL>insert into demo1 values ('A',13); 
SQL>insert into demo1 values ('B',25); 
SQL>insert into demo1 values ('C',38); 
SQL>select * 
SQL&from demo1 
SQL&where :passedValue <= SampleNo 
SQL&order by SampleNo 
SQL&fetch first 1 row only; 
passedValue:11.12 
sno   sampleno 
========== =========== 
A     13 

        1 row found 

注意,所以不是LIMIT我有ANSI SQL的FETCH FIRST,但这并不重要。

+0

select * from demo1 其中SampleNo <11。12 order by SampleNo desc 限制1.我试过这个查询,它有些工作,但我得到了错误的结果 – Roy

+1

你有你的运营商错误的方式;-)它应该在哪里11.12 Gallus

+0

@Roy,正如加卢斯所说,它应该是'where 11.12 <= SampleNo'。 – jarlh

0
SELECT T1.S.no FROM Your_tableName T1 WHERE T1.SampleNo = (
    SELECT MAX(T2.SampleNo) FROM Your_tableName T2 WHERE T2.SampleNo BETWEEN @val1 AND @val2); 
+0

感谢Mansoor的快速回复,但用户不会通过val1和val2。 – Roy

+0

比你从哪里得到价值11和12 – Mansoor

+0

它是十进制的数字.ie 11.12 –

0
SELECT a.S.no FROM Your_tableName a WHERE a.SampleNo = 
(
    SELECT MAX(b.SampleNo) FROM Your_tableName b WHERE b.SampleNo > @Passval 
); 
+2

嗨胡森;你的代码可能是正确的,但是在某些情况下,它会作出更好的回答;例如,您可以解释如何以及为什么这个提议的变更可以解决提问者的问题,或许还包括指向相关文档的链接。这将使它对他们更有用,而且对寻求类似问题解决方案的其他网站读者也更有用。 –

+0

感谢您的回复胡森,但查询给我错误的结果 – Roy

0
SELECT `S.no` FROM your_table 
WHERE @passed_value < `SampleNo` 
ORDER BY `SampleNo` ASC 
LIMIT 1 

小心用它点(S.no)你的表的字段名。引用他们使用反引号来避免问题。或者考虑重命名它们。

关于这一点:没有'官方'的MySql命名约定。但也有一些recomendations可能是有趣的坚持:

https://dev.mysql.com/doc/internals/en/coding-style.html

http://www.sqlstyle.guide/#general-1

在那里,你可以找到一个关于一般命名recomendation:“只能使用字母,数字和地名下划线。 “ ......这不是一个严格的规定。