Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > Помогиет с СЕЛЕКТОМ


Автор: Kolia 11.1.2006, 21:42
Есть 2 таблицы
А:
id
status

B:
id
a_id <- через этополе связан с таблицей А
date
type

Надо написать селект, чтобы вышло такое:
A.id, A.status, B.date

Есть условия. Надо брать записи из таблицы В с определенным значение type и чтобы date была больше какой-то указаной даты. Если таких записей несколько, то должна браться запись, у которой значение cdate новее (больше)

Для одной В таблицы написал
Код

SELECT
 b.a_id,
 max(b.cdate)
FROM
 b
WHERE
 b.type NOT IN ('NP')
 AND b.cdate > '2005.12.01'            
GROUP BY b.a_id
ORDER BY b.a_id


Ко всему этому прикрутить бы a.status smile

Автор: DeadSoul 11.1.2006, 21:54
Код

select ID,SOMEMAX,status FROM
(
SELECT
 b.project_id AS ID,
 max(b.cdate) AS SOMEMAX
FROM
 b
WHERE ...
)
INNER JOIN A ON ID=project_id

Автор: Kolia 11.1.2006, 22:12
Напмсал
Код

SELECT
  A_ID,
  MAX_DATE,
  status
FROM
  (
    SELECT
      b.a_id AS A_ID,
      max(b.cdate) AS MAX_DATE
    FROM
      b
    WHERE
      b.type NOT IN ('NP')
      AND b.cdate > '2005.12.01'            
    GROUP BY A_ID
  )
  INNER JOIN A ON A_ID = b.id

На что получил ответ
Incorrect syntax near the keyword 'INNER'.

Автор: boevik 11.1.2006, 22:12
А если по простому
Код

SELECT A.id, A.status, max(B.cdate) as [date]
FROM A INNER JOIN B
ON A.id = B.a_id
GROUP BY A.id, A.status
WHERE b.cdate > '2005.12.01' 
 AND b.type <> 'NP'

Автор: Kolia 11.1.2006, 22:21
Цитата(boevik @ 11.1.2006, 22:12)
А если по простому
Код

SELECT A.id, A.status, max(B.cdate) as [date]
FROM A INNER JOIN B
ON A.id = B.a_id
GROUP BY A.id, A.status
WHERE b.cdate > '2005.12.01' 
 AND b.type <> 'NP'

Тебе зачот. Сработало. Получи плюсик

Автор: DeadSoul 11.1.2006, 22:48
О простом варианте как-то не подумал smile

Надеюсь добрый модератор снесет два моих поста в данной теме.

Автор: Akina 11.1.2006, 23:44
Цитата
На что получил ответ
Incorrect syntax near the keyword 'INNER'.

Это потому что вложенному селекту не был дан алиас.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)