обновить студента, заказанного Batch.dateCreated asc, где Batch.PK и Student.BatchFK совпадают - PullRequest
0 голосов
/ 20 мая 2019

У меня есть две таблицы на сервере sql - Студент и Пакет.

Таблица студента имеет такую ​​природу -

ID | studentname | batchTypeFfk | batchName
1  | Rob         | 1            |  Eng

Таблица пакетных данных такого типа -

ID | name | batchTypeFk | date
1  | Eng  | 1           | 05/18/2019
2  | Mtt  | 1           | 05/20/2019

Тип пакета имеет такую ​​природу -

ID | name  |
1  | Summer

Моя задача состоит в том, чтобы отсортировать таблицу пакетов по возрастанию по дате и обновить таблицу Student.batchName, указав самую последнюю дату, где Batch.batchypeFk = Student.batchTypeFk, имея в виду, что может быть как можно больше пакетов с различными типами пакетов и как можно больше студентов с типами пакетов, использующими сервер sql

Я имею в виду такую ​​попытку, но она не решает проблему, так какимеет ошибки sql

UPDATE a.batchName
  FROM STUDENT a, BATCH b
  where a.batchTypeFk == b.batchTypeFk orderby data asc

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Я думаю, вы можете обновить как это.

Create Table #Batch
(
Id Int
,name varchar(50)
,batchTypeFk Int
,date datetime
)

Insert Into #Temp_St
Values
(1,'Rob',1,'Eng')

Insert Into #Batch
Values
(1,'Eng','1','20190518')
,(2,'Mtt',1,'20190520')

С Cte

As
(
Select ROW_NUMBER() OVER (Order By date desc) as rn,s.*
From #Batch b
Inner Join #Temp_St s On b.batchTypeFk=s.batchTypeFk
)

Обновить Cte

Set batchName='Summer' 
Where rn=1
0 голосов
/ 20 мая 2019

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

UPDATE S
SET S.name = C.name
FROM student  S
INNER JOIN
(
    --Picking Name by joining to the same table
    --Based on the Max Date and batchTypeFk 
    --selectted in the sub query
    SELECT A.batchTypeFk,B.name 
    FROM 
    (
        --Here only select MAX Date per batchTypeFk
        SELECT batchTypeFk,MAX(date) date
        FROM batch 
        GROUP BY batchTypeFk 
    )A
    INNER JOIN batch B ON A.batchTypeFk = B.batchTypeFk AND A.date = B.date
)C ON S.batchTypeFk = C.batchTypeFk
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...