2009-03-14 8 views
0

Ich habe ein Modell wie:Erhalten Frage mit neuesten Antwort SQL Query

Frage - Id - CreatedOn

Antwort - Id - CreatedOn - QuestionID

Nein, ich erhalten möchten die erste Frage mit der neuesten Antwort.

Ich bin mit SQL Server 2005.

Danke, Chris

+0

In einer Reihe? zB älteste Frage mit letzter Antwort? – gbn

Antwort

0

Etwas wie folgt aus:

SELECT TOP 1 Frage von Fragen Antworten ON Questions.Id = Answers.QuestionID ORDER BY Antworten JOIN .CreatedOn DESC;

+0

Nicht SQL Server-Syntax – gbn

0
select top 1 Question from questions 
    inner join answers on questions.Id = answers.QuestionId 
order by answers.CreatedOn desc 

Sorry für die Verzögerung auf die Bemerkung bei der Beantwortung, ich habe nicht früher Zeit haben, um es zu testen:

Dies wird noch komplizierter, aber so etwas wie dies funktionieren sollte:

select top 5 Question from questions 
    inner join answers on questions.Id = answers.QuestionId 
GROUP BY Question 
ORDER BY max(answers.CreatedOn) desc 

Dies scheint die standard pattern zu sein, um effektiv einen eindeutigen Satz von Daten aus einer Tabelle zu erhalten, ohne die Reihenfolge nach Spalte in den Datensatz aufzunehmen.

Beachten Sie, dass die Anzahl der Elemente, die Sie auswählen möchten (in diesem Fall 5), in SQL eine Konstante sein muss. Wenn Sie den Vorteil haben, LINQ to SQL zu verwenden, könnten Sie dies in LINQ schreiben und die Take-Menge als Variable haben.

So, als Reaktion auf den neuesten Kommentar, dann würden Sie nur hinzufügen, max (answers.CreatedOn) an die Select-Anweisung:

select top 5 Question, max(answers.CreatedOn) 
from questions 
    inner join answers on questions.Id = answers.QuestionId 
GROUP BY Question 
ORDER BY max(answers.CreatedOn) desc 
+0

Hallo, Wenn ich die Top 5 bekommen möchte, habe ich Duplikate. Können Sie mir sagen, wie Sie die Abfrage für verschiedene Top-5-Fragen erstellen? – Christian

+0

Hört sich gut an. Nur eine letzte Frage. Ich möchte auch das Datum der letzten Antwort aus der Antworttabelle in der Abfrage abrufen. Also QuestionId und sein verwandter Alias ​​"LastAnswerDate" in einer Abfrage. – Christian

1
Select top 1 * 
from questions, answers 
where question.id = answers.questionid 
order by answers.createdon desc 
0

würde ich versuchen, so etwas wie dieses

SELECT Id, CreatedOn  
FROM Question Q  
WHERE Q.id IN  
(SELECT DISTINCT TOP 5 A.QuestionID FROM Answer A ORDER BY A.CreatedOn) 
+0

Ich habe ein Problem: A.CreatedOn wird nicht akzeptiert, weil es nicht im ausgewählten Teil der Unterabfrage ist, irgendein Tipp? – Christian

+0

Was, wenn Sie das versuchen? DISTINCT Id SELECT FROM CreatedOn Frage Q WHERE Q.id IN (SELECT FROM TOP 5 Antwort A.QuestionID A WHERE A.QuestionId = Q.id ORDER BY A.CreatedOn) Die SQL erlaubt keine eindeutige Abfrage mit der Reihenfolge nach –