SQL-запрос объединяет связанные данные из 2 строк и показывает последние созданные - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть таблица SQL Server, подобная этой:

Id         Value         Created         EntryId
--------------------------------------------------
1          NULL          2018-01-01      A
2          10            NULL            A
3          NULL          2018-01-02      B
4          20            NULL            B
5          NULL          2018-01-03      C
6          10            NULL            C

и т. Д.

Поле EntryId в основном относится к записям.Например, элементы из строк 1 и 2 принадлежат одной и той же записи, 3 и 4 - к другой записи, 5 и 6 - к другой записи, но запись 5 и 6 относится к записи 1 и 2, поскольку значение одинаково.

Итак, мне нужно создать запрос, который будет выводить что-то вроде этого:

Value        Created
-------------------------------
10           2018-01-03
20           2018-01-02

, если существует несколько записей, в которых значение совпадает, выберите самую последнюю.

EntryId - это поле, которое связывает значение и когда оно было создано.В основном, в приведенном выше примере значение 10 было введено дважды, но мне нужно самое последнее

Я пытался:

SELECT Value, MAX(Created), EntryId
FROM TABLE_NAME
GROUP BY EntryId, Value

PS: мне нужно запустить это в представлении, поэтому я не могу создать временнуютаблица

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Попробуйте - замените 'YourTable' именем вашей таблицы!

select 
    Value,
    max(b.Created) as Created
from YourTable a    
    inner join (select EntryId, max(Created) Created from YourTable group by EntryID) b
        on a.EntryId = b.EntryId
where Value is not null
group by Value
0 голосов
/ 14 февраля 2019

Вы можете сделать это с одной агрегацией:

select tv.value, max(tc.created)
from t tv join
     t tc
     on tv.entryid = tc.entryid and
        tv.value is not null and
        tc.value is not null
group by tv.value;
0 голосов
/ 14 февраля 2019

Вам нужно два запроса с двумя группами по.Это поможет (обратите внимание, что оператор создания таблицы предназначен только для демонстрационных целей):

CREATE TABLE t
    ([Id] int, [Value] varchar(4), [Created] varchar(10), [EntryId] varchar(1))
;

INSERT INTO t
    ([Id], [Value], [Created], [EntryId])
VALUES
    (1, NULL, '2018-01-01', 'A'),
    (2, '10', NULL, 'A'),
    (3, NULL, '2018-01-02', 'B'),
    (4, '20', NULL, 'B'),
    (5, NULL, '2018-01-03', 'C'),
    (6, '10', NULL, 'C')
;

GO
6 rows affected
create view V1 as 
select value, max(created) Created from (
  select max(value) value, max(Created) Created, EntryId
  from t
  group by EntryId
) t2
group by value
GO
select * from v1
GO
value | Created   
:---- | :---------
10    | 2018-01-03
20    | 2018-01-02

дБ <> скрипка здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...