2016-11-22 8 views
0

ich diese Tabelle MITTELWERTWählen Minimalwert der Spalte A, wo Spalte B = 1

enter image description here

Ich möchte

select * from table where VhrNum=MIN(VhrNum) and EmptyOrNot=1 

Ich habe versucht, diese Frage haben, aber es funktioniert nicht

select * 
from Average 
where Itmnum='1' 
    and VhrNum = (
        select MIN(VhrNum) 
        from (
          select * 
          from Average 
          where EmptyOrNot = '1' 
         ) 
       ) 

In meinem Fall sollte es die dritte Zeile

012 auswählen
+0

bitte posten Daten als Text – TheGameiswar

+0

"es funktioniert nicht" ist kein Problem Beschreibung. Was funktioniert nicht? Error? Was ist dann der Fehler? Unerwartetes Ergebnis? Was ist dann das Ergebnis? – HoneyBadger

+0

Warum die dritte Reihe? 'MIN()' gibt den Minimalwert zurück - in Ihrem Fall ist dies "1" und es gibt keinen Datensatz mit 'VhrNum = 1' UND' EmptyOrNot = '1'' –

Antwort

3

Warum nicht einfach dienehmenReihe und order by durch die Spalte?

SELECT TOP 1 * 
FROM [table] 
WHERE EmptyOrNot=1 
ORDER BY VhrNum 
+1

Dies ist die perfekte Arbeit für mich Trotz der ich meine Frage nicht auf eine gute Art und Weise gestellt aber du hast es bekommen Vielen Dank –

0

können Sie versuchen, wie diese

SELECT MIN(VhrNum) FROM table_name where EmptyOrNot=1; 
+0

Es ist Arbeit, wenn ich nur die VhrNum Spalte Wert möchte, aber ich brauche alle Spalten Und danke für Hilfe :) –

2

Verwenden TOP 1 mit ORDER BY

select Top 1 * from table where EmptyOrNot=1 
Order by VhrNum ASC 

Wenn Sie mehr als einen Datensatz mit dem Wert min VhrNum und Sie wollen alle tie Datensätze verwenden dann TOP 1 WITH TIES

select Top 1 With Ties * from table where EmptyOrNot=1 
Order by VhrNum ASC 
0

Aggregatfunktionen benötigen ein GROUP BY - oder man kann ORDER BY und die ersten wählen.

Aggregat lässt Sie nicht eine SELECT * machen, die sowieso nicht wirklich gute Praxis ist, und Aggregat macht es klarer, dass Sie tatsächlich versuchen, die MIN davon zu bekommen. TOP 1/ORDER BY würde Sie eine SELECT * tun, aber möglicherweise weniger sofort klar, dass alles, was Sie wirklich versuchen, ist die MIN(VhrNum).

Aggregate:

SELECT MIN(VhrNum) 
FROM Average 
WHERE EmptyOrNot = 1 
GROUP BY EmptyOrNot 

Top:

SELECT TOP(1) VhrNum, * 
FROM Average 
WHERE EmptyOrNot = 1 
ORDER BY VhrNum ASC 
0

du versuchen:

select top 1 * from table where VhrNum= (select min(VhrNum) from table); 
+1

Bessere Antworten auf dieser Linie wurden bereits gegeben, ein "Top" ohne eine "Reihenfolge von" gibt nicht-deterministische Ergebnisse. Außerdem fehlen die Kriterien "emptyOrNot" und "Itmnum" – HoneyBadger

Verwandte Themen