Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сложный запрос / 10 сообщений из 10, страница 1 из 1
27.08.2020, 13:34
    #39992952
jenja82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
нужна помощь. в моей таблице 650000 строк и 4 столбца: f1, f2, f3, files
бьюсь над задачей- как вывести все строки:
где совпадают значения в столбце f2,
начинаются с одинакового символа в столбце f3 (числа),
и разные по значениям в столбце files.
перепробовал много вариантов, не идет
...
Рейтинг: 0 / 0
27.08.2020, 13:39
    #39992958
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
Выполните пункт 4 и пункт 6 из рекомендаций .
...
Рейтинг: 0 / 0
27.08.2020, 14:38
    #39992994
jenja82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
OK/
версия ПО Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86)
Feb 10 2012 19:13:17
Copyright (c) Microsoft Corporation
Express Edition on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (WOW64)
через Database Engine .

Результат нужен в таком виде:
f2 f3 files
284560451 431 1401
284560451 451 1200
178851380 130 1401
178851380 130 2550
193641606 101 1401
193641606 180 201
...
Рейтинг: 0 / 0
27.08.2020, 14:39
    #39992995
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
jenja82
OK/
версия ПО Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86)
Feb 10 2012 19:13:17
Copyright (c) Microsoft Corporation
Express Edition on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (WOW64)
через Database Engine .

Результат нужен в таком виде:
f2 f3 files
284560451 431 1401
284560451 451 1200
178851380 130 1401
178851380 130 2550
193641606 101 1401
193641606 180 201
Из какого "вида"?
...
Рейтинг: 0 / 0
27.08.2020, 16:28
    #39993051
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
--1. Нужен уникальный идентификатор строки id

--2. дальше так и пишешь

with t as ( select * from [моей таблице 650000 строк] )

 select * from t
   where exists( select * from t as t1 where t1.f2 = t.f2 and t1.id <> t.id ) -- где совпадают значения в столбце f2,
     and exists( select * from t as t1 where left(t1.f3, 1) = left(t.f3, 1) and t1.f3 > '' and try_cast(t1.f3 as float) is not null and try_cast(t.f3 as float) is not null and t1.id <> t.id ) -- начинаются с одинакового символа в столбце f3 (числа)
	 and not exists( select * from t as t1 where t1.files = t.files and t1.id <> t.id ) -- и разные по значениям в столбце files
   order by f2, left(f3, 1)
...
Рейтинг: 0 / 0
27.08.2020, 17:18
    #39993073
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
declare @t table (f2 int, f3 int, files int);

insert into @t
 (f2, f3, files)
values
 (200000000, 531, 1401);

insert into @t
 (f2, f3, files)
values
 (284560451, 431, 1401),
 (284560451, 451, 1200),
 (178851380, 130, 1401),
 (178851380, 130, 2550),
 (193641606, 101, 1401),
 (193641606, 180, 201);

insert into @t
 (f2, f3, files)
 select f2, f3, files from @t;

select * from @t;

with t as
(
 select
  f2, f3, files,
  row_number() over (partition by f2, left(cast(f3 as varchar(10)), 1), files order by 1/0) as rn,
  count(*) over (partition by f2, left(cast(f3 as varchar(10)), 1), files) as c
 from
  @t
)
select
 f2, f3, files
from
 t
where
 c > 1 and rn = 1;
...
Рейтинг: 0 / 0
28.08.2020, 13:42
    #39993429
jenja82
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
Спасибо за старания, ребята.
код от Алекса выводит пустой результат.
код от invm выводит 275 результатов, но не то.
будем думать дальше.
...
Рейтинг: 0 / 0
28.08.2020, 15:55
    #39993495
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
jenja82,
чутка код invm поправил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
declare @t table (f2 int, f3 int, files int);

insert into @t
 (f2, f3, files)
values
 (200000000, 531, 1401);

insert into @t
 (f2, f3, files)
values
 (284560451, 431, 1401),
 (284560451, 451, 1200),
 (178851380, 130, 1401),
 (178851380, 130, 2550),
 (193641606, 101, 1401),
 (193641606, 180, 201);

insert into @t
 (f2, f3, files)
 select f2, f3, files from @t;

select * from @t order by f2, f3, files;

with t as
(
	select f2, left(cast(f3 as varchar(10)), 1) f3 from @t group by  f2, left(cast(f3 as varchar(10)), 1) having count(files) > 1
)
select top (1) With ties
 t1.f2, t1.f3, t1.files
from
 @t t1
join t On t.f2 = t1.f2 and t.f3 = left(cast(t1.f3 as varchar(10)), 1)
order by 
	row_number() over (partition by t1.f2, left(cast(t1.f3 as varchar(10)), 1), t1.files order by 1/0)
...
Рейтинг: 0 / 0
28.08.2020, 16:55
    #39993528
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
jenja82
Спасибо за старания, ребята.
код от Алекса выводит пустой результат.
код от invm выводит 275 результатов, но не то.
будем думать дальше.


Чтобы понять ОТВЕТ надо:
а) правильно задать вопрос.
б) знать ответ на 99.9%.
...
Рейтинг: 0 / 0
30.08.2020, 22:55
    #39993958
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сложный запрос
f2f3files28456045141112002845604514211401284560451431140128456045241214022845604524221402а из этих какие строки подойдут?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / сложный запрос / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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