Member 12245539 Ответов: 2

Как удалить дубликат значения из datagridview с помощью winform C#


У меня есть DataGridView. Он содержит две колонки, которые являются

EMPId    |   DATEtiME
1        |   2019-04-20 07:30:00.000
1        |   2019-04-20 12:30:00.000
1        |   2019-04-20 13:00:00.000
2        |   2019-04-20 07:30:00.000
2        |   2019-04-20 07:30:00.000
2        |   2019-04-20 13:00:00.000
3        |   2019-04-20 07:30:00.000
3        |   2019-04-20 12:30:00.000


Я хочу удалить значение второй строки в EMPID 1, и я хочу удалить второе значение в EMPID 2, и EMPID останется прежним. Нравится.

EMPId    |   DATEtiME
1        |   2019-04-20 07:30:00.000
1        |   2019-04-20 13:00:00.000
2        |   2019-04-20 07:30:00.000
2        |   2019-04-20 13:00:00.000
3        |   2019-04-20 07:30:00.000
3        |   2019-04-20 12:30:00.000



Пожалуйста, помогите кому-нибудь

Что я уже пробовал:

..................................................................................................................

0x01AA

а) я не вижу логики в вашем примере, особенно для EMPId == '1'.
б) предполагая, что данные поступают из базы данных, подумайте о SELECT DISTINCT

Member 12245539

Для EMPID 1 в той же дате он имеет три записи, такие как 07.30, 12.30 и 13.00. Теперь я хочу сохранить только 1 запись и последнюю запись...

0x01AA

Другими словами: Вам нравится показывать только первое и последнее в соответствии с датой для данного EMPId?

Member 12245539

Да

0x01AA

И данные поступают из базы данных, которая может быть запрошена SQL?

Member 12245539

SQL Server

0x01AA

Я не читал его внимательно но похоже он может вам помочь:https://www.codeproject.com/Questions/636953/To-find-the-first-and-last-records-in-a-given-tabl[^]

Member 12245539

Эти данные поступают из SQL server

BillWoodruff

покажите код, который вы пробовали ! вы хотите изменить данные в базе данных или только те, которые отображаются в пользовательском интерфейсе ?

Member 12245539

Только хочу изменить пользовательский интерфейс..

BillWoodruff

Итак: отредактируйте свой вопрос и покажите, как теперь вы получаете данные из базы данных в DataGridView. Опишите, что вы узнали о том, как фильтровать данные. Начать здесь:

https://www.google.com/search?ei=4Te7XLrDIpC-9QPDjZq4BQ&q=c%23+filter+data+displayed+in+datagridview

2 Ответов

Рейтинг:
2

Gerry Schmitz

Выберите и сгруппируйте в разделе "дубликаты столбцов / полей".

Группировка по EMPID, DateTime.


Рейтинг:
15

0x01AA

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

а) создать тестовую таблицу

CREATE TABLE Tbl
(
	EMPId integer,
	DATEtiME DateTime
);

b.) вставить тестовые данные
INSERT INTO Tbl(EMPId, DATEtiME)
VALUES(1, '2019-04-20 07:30:00.000'),
(1, '2019-04-20 07:30:00.000'),
(1, '2019-04-20 12:30:00.000'),
(1, '2019-04-20 13:00:00.000'),
(2, '2019-04-20 07:30:00.000'),
(2, '2019-04-20 07:30:00.000'),
(2, ' 2019-04-20 13:00:00.000'),
(3, '2019-04-20 07:30:00.000'),
(3, '2019-04-20 12:30:00.000'),
(4, '2019-04-20 00:30:00.000')

c.) тестовый запрос
SELECT DISTINCT
	a.EMPId, 
	a.DATEtiME
FROM Tbl a
WHERE a.DATEtiME IN (SELECT MIN(minEmp.DATEtiME) FROM Tbl minEmp WHERE minEmp.EMPId = a.EMPId)
   OR  a.DATEtiME IN (SELECT MAX(maxEmp.DATEtiME) FROM Tbl maxEmp WHERE maxEmp.EMPId = a.EMPId)

г) результат
1	2019-04-20 07:30:00.000
1	2019-04-20 13:00:00.000
2	2019-04-20 07:30:00.000
2	2019-04-20 13:00:00.000
3	2019-04-20 07:30:00.000
3	2019-04-20 12:30:00.000
4	2019-04-20 00:30:00.000


Скорее всего, эксперты по SQL @CHill60 и @losmac могут дать вам лучший ответ ;)


Member 12245539

за это я ставлю оценку 5..

0x01AA

Спасибо

0x01AA

Просто пришло мне в голову IN против. =: Вместо
SELECT DISTINCT
a.EMPId,
a.DATEtiME
FROM Tbl a
WHERE a.DATEtiME IN (SELECT MIN(minEmp.DATEtiME) FROM Tbl minEmp WHERE minEmp.EMPId = a.EMPId)
OR a.DATEtiME IN (SELECT MAX(maxEmp.DATEtiME) FROM Tbl maxEmp WHERE maxEmp.EMPId = a.EMPId)

мы можем писать
SELECT DISTINCT
a.EMPId,
a.DATEtiME
FROM Tbl a
WHERE a.DATEtiME = (SELECT MIN(minEmp.DATEtiME) FROM Tbl minEmp WHERE minEmp.EMPId = a.EMPId)
OR a.DATEtiME = (SELECT MAX(maxEmp.DATEtiME) FROM Tbl maxEmp WHERE maxEmp.EMPId = a.EMPId)