2016-11-30 2 views
-1

Ich versuche, eine Abfrage zu schreiben, die Daten vergleichen, die von einzelner SpalteWie zwischen zwei Reihen von derselben Tabelle

So habe ich eine Tabelle mit Struktur wie

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

So, jetzt dem Endbenutzer den Vergleich übergibt einige Stichprobenzahlen zB 11.12. Jetzt muss ich diese bestandene Zahl mit der sampleNo Spalte vergleichen. Nun in diesem Szenario 11.12 kommt zwischen 0 und 13, so dass ich A als eine Ausgabe für die Abfrage zeigen muss.

Ich hoffe, Sie haben die Frage verstanden.

Ich brauche eine Abfrage wie

erhalten die S.no wo passedValue> 0 und < = 13 zu schreiben. Und soll die Ausgabe seiner 100

Ebenso, wenn ein Benutzer 24 als eine Eingabe geht dann meine Abfrage wie werden sollte S.no, wo passedValue> 13 und < = 25. Und sollte die Ausgabe

Wir freuen uns auf Ihre Lösung und Dank im Voraus A sein für die Hilfe ..

+1

Ihre Frage ist unvollständig. Was ist das erwartete Ergebnis, wenn die Eingabe 100 ist? Und wenn die Eingabe -1 ist? – axiac

+0

Der Eingang liegt innerhalb des Bereichs der Abtastzahl. Der Benutzer muss also die Eingabe innerhalb des Bereichs für einen möglichen Vergleich übergeben. – Roy

Antwort

1

Diese Abfrage wird die Zeile mit dem kleinsten SampleNo größer als passedValue zurückzukehren.

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

Führt mit wörtlichen für übergebenen Wert als:

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 

Und mit dem Parameter für den ersten Wert als:

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 

Bitte beachte, dass ich MySQL nicht verwenden, so dass anstelle von LIMIT Ich habe ANSI SQL FETCH FIRST, aber das spielt hier keine Rolle.

+0

Wählen Sie * von demo1 wo SampleNo <11.12 Sortieren nach SampleNo desc Limit 1. Ich habe diese Abfrage versucht und es funktioniert etwas, aber ich bekomme ein falsches Ergebnis – Roy

+1

Sie haben Ihren Operator falsch herum ;-) sollte es sein, wo 11.12 Gallus

+0

@Roy, Wie Gallus sagte, sollte es 'where 11.12 <= SampleNo sein. – 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

Danke für die schnelle Antwort Mansoor, aber Benutzer wird Val1 und Val2 nicht übergeben. – Roy

+0

, als wenn Sie Wert erhalten von 11 und 12 – Mansoor

+0

es ist die Nummer mit dezimal .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

Hallo Husen; Ihr Code könnte korrekt sein, aber mit etwas Kontext würde es eine bessere Antwort geben; Zum Beispiel könnten Sie erklären, wie und warum diese vorgeschlagene Änderung das Problem des Fragestellers lösen würde, möglicherweise einschließlich eines Links zu der relevanten Dokumentation. Das würde es für sie nützlicher machen und auch für andere Leser der Website, die nach Lösungen für ähnliche Probleme suchen. –

+0

Danke für die Antwort Husen aber die Abfrage gibt mir falsche Ergebnisse – Roy

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

Seien Sie vorsichtig mit Ihrer Tabelle Feldnamen mit Punkten in ihm (S.no). Zitiere sie mit Backticks, um Probleme zu vermeiden. Oder überlegen Sie, sie umzubenennen.

In diesem Punkt: Es gibt keine 'offiziellen' MySql Namenskonventionen. Aber es gibt einige recomendations, die interessant sein können zu bleiben:

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

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

Dort können Sie eine Empfehlung über allgemeine Namensgebung finden: „Verwenden Sie nur Buchstaben, Zahlen und Unterstrichen in Namen. " ... es ist keine strenge Regel.

Verwandte Themen