Как выбрать запрос из числа записей более 2 с помощью настраиваемого столбца (опция) в MS Access

Я пытаюсь выбрать запрос из числа строк более 2 на основе идентификатора, ДАТЫ и ОПЦИИ в MS Access.

поэтому, если в столбце параметров указано «НЕТ», запись более 2 не включена в мой код запроса sql.

Что-то не так с моим SQL-кодом?

поэтому мой пост отличается от ссылки ниже

ссылка

Пожалуйста, направь меня

Стол Absen

ИДЕНТИФИКАТОР ДАТА ВРЕМЯ ВХОД ВАРИАНТ 5008 28 апреля 24 года 08:00 В 5008 28 апреля 24 года 17:00 ВНЕ 5009 29 апреля 24 года 08:00 В 5009 29 апреля 24 года 17:00 ВНЕ 5009 29 апреля 24 года 17:00 ВНЕ НЕТ 5010 28 апреля 24 года 08:00 В 5011 30 апреля 24 года 08:00 В 5011 30 апреля 24 года 08:00 В 5011 30 апреля 24 года 17:00 ВНЕ

Стол MASTERID

ИДЕНТИФИКАТОР ИМЯИД ИДЕНТИФИКАТОР ПОЗИЦИОНА 5008 А ПЕРСОНАЛ 5009 Б ПЕРСОНАЛ 5010 С ПЕРСОНАЛ 5011 Д ПЕРСОНАЛ

Я использовал этот результат кода SQL следующим образом:

SELECT a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID ON a.ID = MASTERID.ID
WHERE a.option is null and exists(select a.ID from ABSEN a2 where a.ID=a2.ID and a.DATE=a2.DATE group by a.ID and a.DATE and a.option having count(*) > 2)
ORDER BY a.ID, a.DATE, a.INOUT;

Результат из кода

ИДЕНТИФИКАТОР ИМЯИД ДАТА ВРЕМЯ ВХОД 5009 Б 29 апреля 24 года 08:00 В 5009 Б 29 апреля 24 года 17:00 ВНЕ 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 17:00 ВНЕ

Желаемый результат

ИДЕНТИФИКАТОР ИМЯИД ДАТА ВРЕМЯ ВХОД 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 17:00 ВНЕ

Таблица Absen для тестового ответа от @june7

ИДЕНТИФИКАТОР ДАТА ВРЕМЯ ВХОД ВАРИАНТ 5008 28 апреля 24 года 08:00 В 5008 28 апреля 24 года 17:00 ВНЕ 5009 29 апреля 24 года 08:00 В 5009 29 апреля 24 года 17:00 ВНЕ 5009 29 апреля 24 года 17:00 ВНЕ НЕТ 5010 28 апреля 24 года 08:00 В 5011 30 апреля 24 года 08:00 В 5011 30 апреля 24 года 08:00 В 5011 30 апреля 24 года 17:00 ВНЕ 5011 28 августа 24 г. 08:00 В 5011 28 августа 24 г. 17:00 ВНЕ 5011 29-24 августа 08:00 В 5011 29-24 августа 17:00 ВНЕ

Результат ответа @june7

ИДЕНТИФИКАТОР ИМЯИД ДАТА ВРЕМЯ ВХОД 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 08:00 В 5011 Д 30 апреля 24 года 17:00 ВНЕ 5011 Д 28 августа 24 г. 08:00 В 5011 Д 28 августа 24 г. 17:00 ВНЕ 5011 Д 29-24 августа 08:00 В 5011 Д 29-24 августа 17:00 ВНЕ

Таблица Absen для обновления ответов на тестирование от @june7 28-08-2024.

ИДЕНТИФИКАТОР ДАТА ВРЕМЯ ВХОД ВАРИАНТ 5045 12 июля 24 08:11:36 В 5045 12 июля 24 08:11:38 В 5045 12 июля 24 17:01:01 В 5045 12 июля 24 0 ВНЕ 5045 21 июня 24 года 08:16:10 В 5045 21 июня 24 года 17:04:45 ВНЕ 5045 22 июня 24 года 08:18:14 В 5045 21-мая-24 08:19:25 В 5045 21-мая-24 17:04:40 ВНЕ НЕТ

Стол MASTERID

ИДЕНТИФИКАТОР ИМЯИД ИДЕНТИФИКАТОР ПОЗИЦИОНА 5045 М ПЕРСОНАЛ

с обновлением кода ответа

SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND m.POSITIONID ='STAFF' and a.ID & [Date] IN(SELECT ID & [Date] FROM ABSEN GROUP BY ID & [Date] HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;

Результат Обновление ответа (нет записи)

ИДЕНТИФИКАТОР ИМЯИД ДАТА ВРЕМЯ ВХОД

со старой публикацией кода

SELECT a.ID, MASTERID.NAMEID, a.Date, a.Time, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID ON a.ID = MASTERID.ID
WHERE (((MASTERID.POSITIONID)='STAFF') AND ((a.OPTION) Is Null) AND ((Exists (select a.ID from ABSEN a2 where a.ID=a2.ID and a.DATE=a2.DATE group by a.ID having count(*) > 2))<>False))
ORDER BY a.ID, a.Date, a.INOUT;

Результат публикации старого кода

ИДЕНТИФИКАТОР ИМЯИД ДАТА ВРЕМЯ ВХОД 5045 М 12 июля 24 17:01:01 В 5045 М 12 июля 24 08:11:38 В 5045 М 12 июля 24 08:11:36 В 5045 М 12 июля 24 0 ВНЕ

Чтобы уточнить: вы хотите, чтобы (5009, 29 апреля 2024 г.) (три строки) были исключены из вашего запроса, поскольку один или несколько из них имеют OPTION = 'NO'? Если да, просто измените GROUP в подзапросе EXISTS на «группировать по a.ID, a.DATE» (удалите OPTION и используйте запятые для разделения столбцов для группировки).

tinazmu 29.08.2024 03:55

@tinazmu, you want (5009, 29-Apr-2024) (three rows) to be excluded from your query because one or more of them has OPTION='NO'? Если есть опция «НЕТ», то она не считается записью, число которой больше 2, например 5009, 29-Apr-2024 . Хорошо, я попробую

dlaksmi 29.08.2024 04:27

@tinazmu, я пробовал, но для (5009, 29 апреля 2024 г.) появляются 2 записи, но то, что я хочу (5009, 29 апреля 2024 г.), больше не появляется, потому что с помощью этого не более 2 записей колонка OPTION

dlaksmi 29.08.2024 04:34

@tinazmu, есть ли другое решение?, пожалуйста, помогите мне от вас

dlaksmi 29.08.2024 06:58

Почему вы использовали GROUP BY ID & [Date] ; вам следует использовать запятую , для разделения столбцов в GROUP BY. Ваше требование относительно OPTION мне непонятно. `не более 2-х записей с помощью столбца OPTION`; объясните, что это означает, немного подробнее (как вы используете столбец OPTION; пустые значения на самом деле NULL или пустые; как вы обрабатываете N, пустое, нулевое или любое другое значение?

tinazmu 29.08.2024 08:08

@tinazmu, Why did you use GROUP BY ID & [Date] ; you should use comma , to separate columns in the GROUP BY. Это with Code Answer update from june7 и код моего sql with old code posting

dlaksmi 29.08.2024 09:04

@tinazmu, Your requirement around OPTION is unclear to me. это не более 2 записей с помощью столбца справки OPTION` Цель столбца опции со значением «НЕТ» состоит в том, чтобы объявить, что запись не выбирается снова в записи более 2, например 5009 с дата 29-Apr-24 сюда входит запись больше 2, поэтому, если в одной из моих записей используется столбец опций с «НЕТ», тогда статус записи больше 2 означает потерю

dlaksmi 29.08.2024 09:09

до сих пор не ясно: например, у вас нет ID: 5008 в желаемом выводе, почему?

tinazmu 29.08.2024 11:17

@tinazmu, Потому что 5008 только две записи, не больше 2 и есть IN и OUT, так что это 5008 не двойная категория

dlaksmi 29.08.2024 11:55

@tinazmu, дело в том, что запись больше 2 с идентификатором и датой, но если она включает опцию «НЕТ», то запись уменьшается

dlaksmi 29.08.2024 12:07
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1
10
122
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте 2 вложенных запроса и функцию IN():

SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND a.ID IN(SELECT ID FROM ABSEN GROUP BY ID HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;

На основе пересмотренных выборочных данных:

SELECT a.ID, m.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a INNER JOIN MASTERID AS m ON a.ID = m.ID
WHERE a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")
AND a.ID & [Date] IN(SELECT ID & [Date] FROM ABSEN GROUP BY ID & [Date] HAVING Count(*)>2)
ORDER BY a.ID, a.DATE, a.INOUT;

Спасибо за ответ, но я пытаюсь добавить запись для ID 5011 With 28-Aug-24 with each in out Но запись появилась после того, как я обновил ваш ответ.

dlaksmi 27.08.2024 09:40

Обновляю в посте Table Absen for testing answer from @june7 и Result from answer from @june7

dlaksmi 27.08.2024 09:47

Смотрите исправленный ответ.

June7 27.08.2024 10:49

Спасибо за ваш ответ. Я анализирую это в реальном доступе MS. Так что дайте мне время проанализировать и отметить ваши ответы, но не все они кажутся двойными. Пример m.NAMEID='A' Если я использую условиеwhere, в которое я вставляю ваш код ответа SQL, это перед этим кодом a.ID NOT IN(select ID from ABSEN WHERE Option = "NO"). Это такWHERE m.NAMEID='A' and a.ID NOT IN(select ID from ABSEN WHERE Option = "NO")

dlaksmi 27.08.2024 11:47

Извините, я не понимаю вашего комментария. Опубликованный мной запрос дает желаемый результат, показанный в вашем вопросе.

June7 28.08.2024 04:50

Извините за поздний ответ, за недопонимание. Вы можете увидеть это в файле MS Access, которым я поделился, по ссылке. Я делаю два запроса: recordcountmorethan2OLD это в моей публикации и recordcountmorethan2frjune7 это ваш обновленный ответ. Итак, в результате вашего ответа на запрос есть запись, которая не включена, я не знаю, почему

dlaksmi 28.08.2024 05:01

Политика SO заключается в том, что вся информация для анализа проблемы должна быть под вопросом, а не загрузка файлов. Многие не будут скачивать с внешнего сайта. Можно опубликовать сообщение на дискуссионном форуме, где можно прикреплять файлы к сообщению.

June7 28.08.2024 09:16

Хорошо, я опубликовал таблицу тестирования, чтобы вы могли попробовать обновленные ответы и знать, в чем проблема Table Absen for testing answer update from @june7 28-08-2024

dlaksmi 28.08.2024 11:12
Ответ принят как подходящий

Вы хотите перечислить строки, если ID&DATE встречаются более двух раз (не считая строк с OPTION='N'):

SELECT a.ID, MASTERID.NAMEID, a.DATE, a.TIME, a.INOUT
FROM ABSEN AS a 

     INNER JOIN MASTERID 
     ON a.ID = MASTERID.ID
WHERE (SELECT COUNT(*)
       FROM ABSEN AS a2
       WHERE a.ID = a2.ID 
         and a.DATE = a2.DATE
         and IIF(a2.OPTION IS NULL, '', a2.OPTION) <> 'NO'
       ) > 2
ORDER BY a.ID, a.DATE, a.INOUT;

Ваш ответ идеален, извините, что опоздал с ответом.

dlaksmi 30.08.2024 10:00

Другие вопросы по теме