2010-11-17 3 views
1

Ниже приведен упрощенный вариант таблицы базы данных Я поиску информации (назовем его платежи):Нужна помощь с SQL запроса

date  | userid | payment 
20/1/10 |  1  |  10 
21/1/10 |  1  |  15 
17/1/10 |  2  |  7 
18/1/10 |  2  |  9 

Он записывает платежи пользователей на определенные даты. Мне нужно, чтобы выяснить детали первого платежа каждого пользователя следующим образом:

20/1/10 |  1  |  10 
17/1/10 |  2  |  7 

Хранимые процедуры может быть и речи. Есть ли способ сделать это, используя только SQL, или просто добавить в таблицу первый флаг оплаты?

ответ

1

Попробуйте это:

SELECT * FROM Payments 
INNER JOIN (SELECT Min([Date]) AS MinDate, UserID 
      FROM Payments GROUP BY UserID) AS M 
ON M.MinDate = Payments.Date AND M.UserID = Payments.UserID 
+0

почему такой большой длинный маршрут! – Pratik

+0

Пришлось внести небольшую коррекцию, но все это работает так, как ожидалось –

5
SELECT MIN([Date]), userid, payment 
FROM Payments 
GROUP BY Userid, payment 
+0

ли на самом деле не работает. Я не думаю, что вы также должны группировать по оплате –

+0

... кроме того, что вам нужно группировать по платежу, так как у вас есть сводная функция. Каждый столбец должен быть либо частью агрегатной функции, либо в «GROUP BY». – JNK

3
SELECT MIN([Date]), UserID FROM Payments GROUP BY UserID 
+0

Вы должны, вероятно, заключить «Date» в скобки, так как это ключевое слово SQL ... – JNK

+0

@JNK вы правы, исправлены. –

+0

@Matthew Jones - +1 then :) Помните, что с его желаемых результатов он также хочет видеть сумму платежа – JNK

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