2016-11-30 43 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:「只能使用字母,數字和地名下劃線。 「 ......這不是一個嚴格的規定。