Прошу помощи в написании запроса.
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Прошу помощи в написании запроса. Expand / Collapse
Автор
Сообщение
09.11.2006 14:07
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 06.12.2007 13:35
Сообщ.: 29, Visits: 287
Нужно написать запрос, результатом которого будет выборка уникальных значений "Поле1" да так, что среди равных будут выбраны строки с наибольшим значением в "Поле2".
 

Данные такого плана:


Поле1   Поле2     Поле3

(int)       (Data)    (int)

_____________________

1         3/05/06     2

1         2/05/06     27

1         1/05/06     60

2         8/05/06     3

2         6/05/06     10

2         5/05/06     32

2         1/05/06     32

3         8/05/06     18

3         3/05/06     2

_____________________

Нужно получить:


Поле1   Поле2     Поле3

(int)       (Data)    (int)

_____________________

1         3/05/06     2

2         8/05/06     3

3         8/05/06     18

_____________________

Всю голову уже сломала. Может все проще чем я думаю? :)

Вобщем, прошу помощи.

  

Сообщ. #907124
09.11.2006 14:16


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Ну например так... хотя есть еще несколько вариантов. Кроме того, у ва сничего не сказано про поле 3, что делать, если, например, есть две записи с одинаковыми первым и вторым полем?

SELECT

      fld1,

      max(fld2),

      (SELECT TOP 1 fld3

      FROM aaa a2

      WHERE

            a1.fld1=a2.fld1 AND

            Max(a1.fld2)=a2.fld2)

FROM aaa a1

GROUP BY fld1

Сообщ. #907127
09.11.2006 14:22
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 06.12.2007 13:35
Сообщ.: 29, Visits: 287
Первые 2 поля определяют уникальность записи. Фактически, это составной ключ.
Сообщ. #907129
09.11.2006 14:24


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Вот еще как вариант:

SELECT a2.*

FROM

(

      SELECT

            fld1,

            max(fld2)  fld2

      FROM aaa

      GROUP BY fld1

) a1

INNER JOIN aaa a2

      ON  a1.fld1=a2.fld1 and a1.fld2=a2.fld2

Стоимость этого запроса (cost) = 0.01468, предыдущего = 0.01801

Сообщ. #907130
09.11.2006 14:29


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Ну тогда Вам решать какой будете использовать.

От себя могу сказать, что я бы использовал второй.

Сообщ. #907132
09.11.2006 14:44
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 06.12.2007 13:35
Сообщ.: 29, Visits: 287
Супер! Спасибо :) Второй самое то :)

Меня явно не в ту сторону унесло, я зачем то с distinct-ом делала выборку по первому полю и у меня как раз не то что надо попадало :).

Сообщ. #907133
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 11:47