2016-11-30 3 views
-1

я пытаюсь написать запрос, который будет сравнивать Дейты из одного столбцаКак сравнить между двумя рядами же таблицы

Так у меня есть таблица со структурой как

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

Так что теперь конечный пользователь пропускает некоторый случайный пример, например 11,12. Теперь мне нужно сравнить это пройденное число с образцом No Column. Сейчас в этом Сценарисе 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 

И с параметром для первого значения, как:

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 

Обратите внимание, что я не использую MySQL, поэтому вместо LIMIT У меня есть ANSI SQL FETCH FIRST, но это не имеет значения.

+0

выберите * из demo1 где SampleNo <11.12 order by SampleNo desc предел 1. Я пробовал этот запрос, и он работает, но я получаю неправильный результат – Roy

+1

у вас есть ваш оператор не так, круглый ;-) он должен быть где 11.12 Gallus

+0

@Roy, как сказал Галлус, это должно быть «где 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

Hi Husen; ваш код может быть правильным, но с некоторым контекстом он сделает лучший ответ; например, вы могли бы объяснить, как и почему это предлагаемое изменение разрешит проблему опроса, возможно, включая ссылку на соответствующую документацию. Это сделало бы его более полезным для них, а также более полезным для других читателей сайтов, которые ищут решения подобных проблем. –

+0

Спасибо за ответ Husen, но запрос дает мне неправильные результаты – Roy

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

Будьте осторожны с вашими именами таблиц поля с точками в нем (S.no). Процитировать их с помощью backticks, чтобы избежать проблем. Или переименуйте их.

Относительно этого пункта: нет 'официальных' соглашений об именах MySql. Но есть некоторые Рекомендации, которые могут быть интересными придерживаться:

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

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

В наличии, вы можете найти Рекомендации для об общем наименовании: «Только буквы использования, цифры и подчеркивания в именах. " ... это не строгое правило.

Смежные вопросы