2012-04-17 4 views
0

я должен найти верхнюю 1 строку EFFECTIVE_DATE для каждой учетной записиSQL- как найти первую строку?

account dt_effective 
------------------------- 
1 14-04-2012 
1 15-04-2012 
2 13-02-2011 
2 11-03-2012 
3 1-01-2010 
3 02-02-2010 
3 05-01-2012 

ответ должен быть:

account  dt_effective 
------------------------- 
1 14-04-2012 
2 13-02-2011 
3 1-01-2010 

пожалуйста, вы можете помочь мне с запросом, чтобы найти это?

обновил вопрос

+0

попробуйте использовать заказ – SKandeel

+0

@SherifMaherEaid: заказ будет еще дать мне весь набор значений, но я хочу, топ 1 для каждого счет только – ResKing

+3

Вашего ожидаемого результата не имеет смысла. Для аккаунта = 3 вы берете старейший dt_effective, но для аккаунта = 1 вы берете новейший dt_effective. –

ответ

1

Вы можете попробовать

SELECT account, MIN(dt_effective) FROM your_table 
GROUP BY account 
+0

@ResKing: если для аккаунта = 1, то вам нужно 14-02, мой ответ правильный – Marco

+1

yep его работа .. спасибо :) Я принял ответ – ResKing

+1

@ResKing: Хорошая практика. – Marshal

1
SELECT account, MAX(dt_effective) 
FROM [table] 
GROUP BY account 
+0

ya i ll заказать – ResKing

+0

Случайно отредактировал этот ответ вместо моего. Теперь я отбросил свои изменения (и удалил свой собственный, так как он был таким же, как и этот). –

0

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

select account, MAX(dt_effective) from table group by account; 
1
SELECT account, MAX(dt_effective) 
FROM yourTableName 
GROUP BY account 

если вам нужен первый эффективный даты Ente красный только изменить максимум до мин

SELECT account, MIN(dt_effective) 
FROM yourTableName 
GROUP BY account 
+0

Ваш второй запрос - это именно тот, который я дал OP давно, думая о типографии в его вопросе :) – Marco

+0

О да, я только что видел ваш ответ. Я все еще не уверен, что он хочет, поэтому включил оба из них: P – Marshal

+0

спасибо Маршал за ответ :) – ResKing

0

Я пробовал нижеследующий запрос и работает так, как ожидалось.

DECLARE @T TABLE(ACCOUNTID INT, ACCOUNTDATE DATETIME) 
INSERT INTO @T 
VALUES(1, CONVERT(DATE,'14-04-2012',105)) 
INSERT INTO @T 
VALUES(1, CONVERT(DATE,'15-04-2012',105)) 
INSERT INTO @T 
VALUES(2, CONVERT(DATE,'13-02-2011',105)) 
INSERT INTO @T 
VALUES(2, CONVERT(DATE,'11-03-2012',105)) 
INSERT INTO @T 
VALUES(3, CONVERT(DATE,'1-01-2010',105)) 
INSERT INTO @T 
VALUES(3, CONVERT(DATE,'02-02-2010',105)) 
INSERT INTO @T 
VALUES(3, CONVERT(DATE,'05-01-2012',105)) 

SELECT * FROM @T 

SELECT ACCOUNTID, MAX(ACCOUNTDATE) FROM @T 
GROUP BY ACCOUNTID 
+1

Вы проверили ответы, которые он упомянул ?? Получают ли вы те же ответы? Все три ??? – Marshal

+1

Вы читали наши комментарии, прежде чем публиковать тот же ответ, который дается от многих других? :) – Marco

+0

Да, это была моя ошибка. Я был посреди чего-то, когда начал публиковать ответ. Когда я отправил свой ответ, другие ответы на одной строке были уже опубликованы. извинения за это. – Shailesh

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