Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать Select... / 13 сообщений из 13, страница 1 из 1
13.04.2018, 14:22
    #39629875
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
Здравствуйте.
Помогите пожалуйста с запросом:

Есть таблица
tp_Modified tp_ID tp_WorkflowInstanceID tp_Version2018-04-11 03:59:26.000 19818 7EB9C078-E0B9-4B8A-8576-4081B196004C 22018-04-11 03:59:26.000 19804 7EB9C078-E0B9-4B8A-8576-4081B196004C 42018-03-26 11:14:21.000 19476 CEA9B396-AF0F-461C-A2F5-4167D15EC35E 22017-11-29 10:51:32.000 17577 6005A2AE-8713-422B-8B9A-472B3D89BA57 22017-11-29 10:56:13.000 17577 6005A2AE-8713-422B-8B9A-472B3D89BA57 32017-12-08 05:47:11.000 17728 6005A2AE-8713-422B-8B9A-472B3D89BA57 42017-12-07 05:27:01.000 17745 6005A2AE-8713-422B-8B9A-472B3D89BA57 22017-12-08 09:46:10.000 17745 6005A2AE-8713-422B-8B9A-472B3D89BA57 42017-12-11 06:45:44.000 17745 6005A2AE-8713-422B-8B9A-472B3D89BA57 52017-12-11 06:45:47.000 17745 6005A2AE-8713-422B-8B9A-472B3D89BA57 62017-12-08 09:46:10.000 17779 6005A2AE-8713-422B-8B9A-472B3D89BA57 2

Нужно вывести только те записи, где среди повторяющихся tp_ID, - tp_Modified максимальный. Т.е. результат должен быть таким:
tp_Modified tp_ID tp_WorkflowInstanceID tp_Version2018-04-11 03:59:26.000 19818 7EB9C078-E0B9-4B8A-8576-4081B196004C 22018-04-11 03:59:26.000 19804 7EB9C078-E0B9-4B8A-8576-4081B196004C 42018-03-26 11:14:21.000 19476 CEA9B396-AF0F-461C-A2F5-4167D15EC35E 22017-11-29 10:56:13.000 17577 6005A2AE-8713-422B-8B9A-472B3D89BA57 32017-12-08 05:47:11.000 17728 6005A2AE-8713-422B-8B9A-472B3D89BA57 42017-12-11 06:45:47.000 17745 6005A2AE-8713-422B-8B9A-472B3D89BA57 62017-12-08 09:46:10.000 17779 6005A2AE-8713-422B-8B9A-472B3D89BA57 2
...
Рейтинг: 0 / 0
13.04.2018, 14:27
    #39629880
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
версия сервера?
...
Рейтинг: 0 / 0
13.04.2018, 14:30
    #39629883
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
Дедушка,

Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64) Jun 17 2016 19:14:09 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
...
Рейтинг: 0 / 0
13.04.2018, 14:56
    #39629916
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
читать про OVER в связке с ROW_NUMBER или MAX
...
Рейтинг: 0 / 0
13.04.2018, 16:33
    #39630019
assmsk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
Если данных не много можете заджойнить вашу таблицу с (select tp_id , max(tp_modified) tp_modified from table group by tp_id) on tp_id = tp_id and tp_modified = tp_modified
...
Рейтинг: 0 / 0
13.04.2018, 20:18
    #39630091
marsyakupov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
DECLARE @table TABLE
([tp_Modified] DATETIME NOT NULL
,[tp_ID] INT NOT NULL
,[tp_WorkflowInstanceID] [nvarchar](50) NOT NULL
,[tp_Version] [int] NOT NULL )
INSERT INTO @table
VALUES
(CONVERT(DATETIME,'2018-04-11 03:59:26.000',121),19818,'7EB9C078-E0B9-4B8A-8576-4081B196004C',2),
(CONVERT(DATETIME,'2018-04-11 03:59:26.000',121),19804,'7EB9C078-E0B9-4B8A-8576-4081B196004C',4),
(CONVERT(DATETIME,'2018-03-26 11:14:21.000',121),19476,'CEA9B396-AF0F-461C-A2F5-4167D15EC35E',2),
(CONVERT(DATETIME,'2017-11-29 10:51:32.000',121),17577,'6005A2AE-8713-422B-8B9A-472B3D89BA57',2),
(CONVERT(DATETIME,'2017-11-29 10:56:13.000',121),17577,'6005A2AE-8713-422B-8B9A-472B3D89BA57',3),
(CONVERT(DATETIME,'2017-12-08 05:47:11.000',121),17728,'6005A2AE-8713-422B-8B9A-472B3D89BA57',4),
(CONVERT(DATETIME,'2017-12-07 05:27:01.000',121),17745,'6005A2AE-8713-422B-8B9A-472B3D89BA57',2),
(CONVERT(DATETIME,'2017-12-08 09:46:10.000',121),17745,'6005A2AE-8713-422B-8B9A-472B3D89BA57',4),
(CONVERT(DATETIME,'2017-12-11 06:45:44.000',121),17745,'6005A2AE-8713-422B-8B9A-472B3D89BA57',5),
(CONVERT(DATETIME,'2017-12-11 06:45:47.000',121),17745,'6005A2AE-8713-422B-8B9A-472B3D89BA57',6),
(CONVERT(DATETIME,'2017-12-08 09:46:10.000',121),17779,'6005A2AE-8713-422B-8B9A-472B3D89BA57',2)

;WITH T AS
(
SELECT MAX(tp_Modified) AS tp_Modified2
,Tp_ID AS Tp_ID2
FROM @table
GROUP BY
Tp_ID
)

SELECT [tp_Modified]
,[tp_ID]
,[tp_WorkflowInstanceID]
,[tp_Version]
FROM @table
INNER JOIN T
ON T.Tp_ID2 = [tp_ID]
AND T.tp_Modified2 = [tp_Modified]
...
Рейтинг: 0 / 0
13.04.2018, 21:35
    #39630103
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
MAULER,

Слушайте Дедушку. Два вышестоящих поста игнорируйте
ЗЫ:
with t as
(select [tp_ID], [tp_Modified],
rank() over (partition by [tp_ID] order by [tp_Modified] desc) as r
from @table )
select * from t where r=1
...
Рейтинг: 0 / 0
14.04.2018, 14:02
    #39630229
04cf9f9576a6f15
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
GlebanskiMAULER,

Слушайте Дедушку. Два вышестоящих поста игнорируйте
ЗЫ:
with t as
(select [tp_ID], [tp_Modified],
rank() over (partition by [tp_ID] order by [tp_Modified] desc) as r
from @table )
select * from t where r=1А чем плохи два вышестоящих поста? Работать будет даже на древнем сервере.

#Хэш=
...
Рейтинг: 0 / 0
15.04.2018, 19:53
    #39630483
Glebanski
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
04cf9f9576a6f15,

В данном случае "громоздкий старомодный код" vs "современный элегантный".
...
Рейтинг: 0 / 0
16.04.2018, 07:56
    #39630568
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
Коллеги,
благодарю за помощь!

Я был очень близко к вашему варианту, только я применил не Rank() а Row_Number() и не догадался отсортировать по убыванию в поднаборе и "выхватывать" первую строку.
...
Рейтинг: 0 / 0
16.04.2018, 08:27
    #39630574
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
У меня сейчас другая беда. Надо из таблицы:

tp_WorkflowInstanceID tp_VersionC6AB4139-4F5E-41DB-8DA8-0947C31488CA 4 C6AB4139-4F5E-41DB-8DA8-0947C31488CA 4 C6AB4139-4F5E-41DB-8DA8-0947C31488CA 2 C6AB4139-4F5E-41DB-8DA8-0947C31488CA 2 C6AB4139-4F5E-41DB-8DA8-0947C31488CA 4 908606BA-EB87-4BB9-8104-194A1BBCC500 4 908606BA-EB87-4BB9-8104-194A1BBCC500 4 908606BA-EB87-4BB9-8104-194A1BBCC500 6 908606BA-EB87-4BB9-8104-194A1BBCC500 6 908606BA-EB87-4BB9-8104-194A1BBCC500 4 908606BA-EB87-4BB9-8104-194A1BBCC500 6 68C7164C-10AD-4CB2-A0FE-28C5EA976575 4 68C7164C-10AD-4CB2-A0FE-28C5EA976575 4 68C7164C-10AD-4CB2-A0FE-28C5EA976575 4 37BAC7E0-A855-4F36-8E52-311EC0C30B04 2

Отобрать только те записи, где повторяющийся tp_WorkflowInstanceID содержит одни четверки!

Т.е. в результате должна отобраться одна запись:
tp_WorkflowInstanceID tp_Version68C7164C-10AD-4CB2-A0FE-28C5EA976575 4

Моя идея в том, чтобы вывести рядом в ещё одном столбце общее количество записей в подгруппе и тут же количество 4-рок.
Если количество записей в подгруппе = количеству 4-рок - выводить эту запись.

Как вывести общее количество в подгруппе я знаю:
Код: sql
1.
2.
3.
4.
5.
select tp_WorkflowInstanceID,
         tp_Version,
	 count(tp_WorkflowInstanceID) over (partition by tp_WorkflowInstanceID) as cnt
 from AllUserData
order by tp_WorkflowInstanceID



а как сделать чтобы рядом четверки подсчитывались - не могу сообразить ))
...
Рейтинг: 0 / 0
16.04.2018, 08:43
    #39630582
Massa52
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
MAULER,
и тут же кол-во 4
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
;WITH T AS
(
select tp_WorkflowInstanceID,
         tp_Version,
	 count(tp_WorkflowInstanceID) over (partition by tp_WorkflowInstanceID) as cnt
	 ,sum(CASE WHEN tp_Version = 4 THEN 1 ELSE 0 END) over (partition by tp_WorkflowInstanceID) as cnt4

 from @table
)
SELECT * FROM T order by tp_WorkflowInstanceID
...
Рейтинг: 0 / 0
16.04.2018, 08:49
    #39630585
MAULER
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написать Select...
Massa52,

Вы практически читаете мои мысли)))

Код: sql
1.
2.
3.
4.
5.
6.
select tp_WorkflowInstanceID,
         tp_Version,	   
	 count(tp_WorkflowInstanceID) over (partition by tp_WorkflowInstanceID) as cnt,
	 count(case when tp_Version = 4 then 1 else null end) over (partition by tp_WorkflowInstanceID) as cnt4
 from AllUserData 
order by tp_WorkflowInstanceID



Благодарю!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите написать Select... / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]