Форум программистов, компьютерный форум, киберфорум
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339

Удаление ненужных строк

29.12.2015, 14:40. Показов 2118. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, суть задачи:

имеется таблица вида :
fullname start end
Ivan Ivanov 12:00 14:00
Ivan Ivanov 14:00 16:00
Ivan Ivanov 16:00 20:00
Ivan Ivanov 20:00 21:00

если обратите внимание, start время равно end времени из предыдущей строки
по сути данную таблицу можно преобразовать к одной строке:

fullname start end
Ivan Ivanov 12:00 21:00

Мой вопрос: как это сделать?Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.12.2015, 14:40
Ответы с готовыми решениями:

Удаление ненужных символов в строке
Добрый день. Есть в таблице столбец ФИО, к примеру Иванов Иван Иванович (101). Необходимо удалить (101) есть такая возможность?

Удаление всех ненужных чисел
Всем привет, такое дело. У меня есть текстовый документ, где есть большое количество слов, так вот, мне нужно сделать по факту не обычное...

Удаление повторяющихся строк
В таблице есть поля А есть одинаковые записи, как удалить так чтобы осталось одна запись?

14
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 14:42
Ну удалите все строки кроме одной) В чём проблема то?
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
29.12.2015, 14:44  [ТС]
вы невнимательно прочитали)

Ivan Ivanov 12:00 21:00 такой строки нет, время 12:00 берется из первой строки а 21:00 из последней
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 14:45
ну так и что? Удалите все строки кроме одной, потом замените значение 14 00 на 21 00
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
29.12.2015, 14:48  [ТС]
допустим смотрим вторую строчку и видим end равно 16:00 и в третьей строке время в колонке start равно 16:00
,по сути вместо второй и третьей строки достаточно было бы одной строки Ivan Ivanov 14:00 20:00

Добавлено через 1 минуту
мне нужна проверка, т.к. не во всех случаях время "бесшовное", может быть и когда временной отрезок обрывается на мелкие отрезки.

Добавлено через 44 секунды
это нужно не ручками делать, а в коде. т.к. массив данных большой
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 14:48
Ну и что?) Я вас не понимаю. В хотите в таблице оставить одну строчку. Ну так удалите остальные
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
29.12.2015, 14:49  [ТС]
можно ли это как-нибудь в коде изобразить?

Добавлено через 29 секунд
я не хочу удалить, я хочу убрать ненужные строки.
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 14:49
Какой код вас нужен? Какую задачу должен код выполнять?
0
3 / 3 / 1
Регистрация: 30.05.2013
Сообщений: 339
29.12.2015, 14:50  [ТС]
чтобы таблица стала меньше

Добавлено через 27 секунд
я подробно написал выше)
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 15:12
Используйте временную таблицу

Добавлено через 8 минут
SQL
1
2
3
4
5
6
7
8
9
SELECT *
INTO #Temp
FROM
 
  (SELECT fullname, MAX(END), MIN(START) FROM table_1 GROUP BY fullname)
GO
TRUNCATE TABLE table_1
GO
INSERT INTO table_1 (SELECT * FROM #table)
Добавлено через 2 минуты
Это то как я понял

Добавлено через 5 минут
Если что, спрашивайте
1
 Аватар для operaphantom
21 / 21 / 12
Регистрация: 24.10.2014
Сообщений: 53
29.12.2015, 16:48
T-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
39
40
41
42
43
44
45
46
47
48
49
50
declare @someTable table
(
    name nvarchar(50),
    surname nvarchar(50),
    start time(0),
    endd time(0)
)
 
declare @resultTable table
(
    name nvarchar(50),
    surname nvarchar(50),
    start time(0),
    endd time(0)
)
 
insert into @someTable
values
('Ivan', 'Ivanov', '12:00', '14:00'),
('Ivan', 'Ivanov', '14:00', '15:00'),
('Ivan', 'Ivanov', '16:00', '20:00'),
('Ivan', 'Ivanov', '20:00', '21:00'),
('Ivan', 'Ivanov', '22:00', '23:00')
 
--Собственно решение
declare @cursor cursor
set @cursor = cursor scroll for select * from @someTable
 
declare @name nvarchar(50)
declare @surname nvarchar(50)
declare @start time(0)
declare @end time(0)
 
open @cursor
fetch next from @cursor into @name, @surname, @start, @end
 
while @@fetch_status = 0
begin
    if not exists(select name from @resultTable where name = @name and surname = @surname and endd = @start)
    insert into @resultTable values (@name, @surname, @start, @end)
    else 
    update @resultTable
    set endd = @end
    where name = @name and surname = @surname and endd = @start
    fetch next from @cursor into @name, @surname, @start, @end
end
 
close @cursor
 
select * from @resultTable
Но работать будет долго и нудно. Наверняка можно придумать что-нибудь получше. =)
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 17:02
Это ужас. Никогда не используйте курсоры. Забудьте о них вообще. Хуже по производительности нету ничего. Ещё и для удаления строк...
0
 Аватар для operaphantom
21 / 21 / 12
Регистрация: 24.10.2014
Сообщений: 53
29.12.2015, 17:40
Цитата Сообщение от FaTFer Посмотреть сообщение
Это ужас. Никогда не используйте курсоры. Забудьте о них вообще. Хуже по производительности нету ничего. Ещё и для удаления строк...
Я предупредил.
Цитата Сообщение от operaphantom Посмотреть сообщение
Но работать будет долго и нудно
В качестве конструктивной критики с удовольствием рассмотрю ваш вариант решения с учетом:

Цитата Сообщение от bazelbodayFaron Посмотреть сообщение
мне нужна проверка, т.к. не во всех случаях время "бесшовное", может быть и когда временной отрезок обрывается на мелкие отрезки.
0
3 / 3 / 0
Регистрация: 24.12.2015
Сообщений: 44
29.12.2015, 17:47
Нужно знать сколько этот "временной отрезок". Если он не очень большой, то эффективнее будет написать CTEшку и просто перебирать рядом стоящие даты для каждого человека.
0
3614 / 2135 / 756
Регистрация: 02.06.2013
Сообщений: 5,169
29.12.2015, 19:46
T-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
39
40
41
42
43
declare @someTable table
(
    id int identity primary key,
    name nvarchar(50),
    surname nvarchar(50),
    start time(0),
    finish time(0),
    unique (name, surname, id)
);
 
insert into @someTable
values
('Ivan', 'Ivanov', '12:00', '14:00'),
('Ivan', 'Ivanov', '14:00', '15:00'),
('Ivan', 'Ivanov', '16:00', '20:00'),
('Ivan', 'Ivanov', '20:00', '21:00'),
('Ivan', 'Ivanov', '22:00', '23:00'),
('Пуся', 'Вапкин', '10:00', '13:00'),
('Пуся', 'Вапкин', '13:00', '19:00');
 
with t1 as
(
 select
  name, surname, start, row_number() over (partition by name, surname order by start) as rn
 from
  @someTable a
 where
  not exists(select 1 from @someTable where name = a.name and surname = a.surname and finish = a.start)
),
t2 as
(
 select
  name, surname, finish, row_number() over (partition by name, surname order by finish) as rn
 from
  @someTable a
 where
  not exists(select 1 from @someTable where name = a.name and surname = a.surname and start = a.finish)
)
select
 t1.name, t1.surname, t1.start, t2.finish
from
 t1 join
 t2 on t2.name = t1.name and t2.surname = t1.surname and t2.rn = t1.rn;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2015, 19:46
Помогаю со студенческими работами здесь

Удаление строк и столбцов
Я удалил строки и столбцы вот таким способом DELETE FROM WHERE =21; ТЕПЕРЬ когда я добавляю новые данные автонумерация идёт...

Удаление строк из таблиц
Таблица состоит из столбца "id" и столбца "имя". В таблицу добавляю несколько строк: id имя 1 Миша 2 Юра 3 Саша и...

Удаление строк из таблицы
Добрый день! Есть проблема: - необходимо из таблицы удалить строки дата в которых отстоит от текущей на 1 год (365 дней) - это...

Удаление строк с внешним ключем
Создаю 2 таблицы: CREATE TABLE A( ID INTEGER PRIMARY KEY, Number INTEGER NULL ) CREATE TABLE B( ID INTEGER PRIMARY KEY, ...

Удаление дубликатов строк из таблицы
Собственно существует ли какая нибудь команда или универсальный запрос, который подойдет к любой таблице без вникания в ее структуру?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru