Nano Hash - криптовалюты, майнинг, программирование

Проверить интервал между двумя датами

У меня есть таблица с интервалами времени от даты a до даты b. Интервалы в 30 минут такие:

2021-02-22 00:00:00.000
2021-02-22 00:30:00.000
2021-02-22 01:00:00.000
2021-02-22 01:30:00.000
2021-02-22 02:00:00.000
2021-02-22 02:30:00.000
2021-02-22 03:00:00.000
[...]
2021-03-21 23:30:00.000

Я должен проверять, есть ли записи каждые 30 минут от моего MIN(date) = 2021-02-22 00:00:00.000 до моего MAX(date) = 2021-03-21 23:30:00.000.

COUNT() для записей за каждую календарную неделю равно 336. 30 минут в день * 7 дней в неделю = (24 * 2) * 7).
Я попытался проверить, есть ли 336 записей для каждой календарной недели, но если одна запись отсутствует, а одна существует дважды, количество составляет 336. , но результат неверный.

SELECT *
FROM (
         SELECT a,
                b,
                DATEPART(iso_week, interval_datetime) AS cw,
                COUNT(id)                             AS counts
         FROM data_table
         GROUP BY DATEPART(iso_week, interval_datetime),
                  a,
                  b
     ) AS xyz
WHERE counts <> 336;

Есть ли другой способ проверить наличие двойных записей и проверить, используется ли каждая 30-минутная запись? Может быть, без даты таблицы.

Спасибо!


  • Означает ли каждые 30 минут не более 30 минут между записями или что каждые 30 минут, начиная с 00:00, есть запись? т.е. можно ли иметь 00:15 и 00:50 и 01:25? 10.02.2021
  • только раз с 00:00, а затем каждые 30 минут до 00:00 снова и так далее. ваше здоровье! 10.02.2021
  • Это мой первый вариант или второй? 10.02.2021
  • не более 30 мин между записями и каждые 30 мин начиная с 00:00 полночь имеет запись 10.02.2021

Ответы:


1
WITH CTE(CHECK_TIME) AS
(
   SELECT '2021-02-22 00:00:00.000'
      UNION ALL
   SELECT'2021-02-22 00:30:00.000'
      UNION ALL
   SELECT'2021-02-22 01:00:00.000'
     UNION ALL
   SELECT'2021-02-22 01:30:00.000'
     UNION ALL
   SELECT'2021-02-22 02:00:00.000'
     UNION ALL
   SELECT'2021-02-22 02:30:00.000'
     UNION ALL
   SELECT'2021-02-22 03:00:00.000'
     UNION ALL
   SELECT '2021-02-22 03:18:00.000'--FAIL ROW
     UNION ALL
   SELECT'2021-02-22 03:00:00.000'--DOUBLED RECORD
  )
 SELECT C.CHECK_TIME,LAG(CHECK_TIME)OVER(ORDER BY C.CHECK_TIME)LAGG,
    ABS(DATEDIFF(MI,C.CHECK_TIME,LAG(CHECK_TIME)OVER(ORDER BY C.CHECK_TIME)))AS         MINUTES_DIFFERENCE
  FROM CTE AS C

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

10.02.2021

2

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

SELECT *
FROM (
         SELECT a,
                b,
                interval_datetime,
                LEAD(interval_datetime) OVER (ORDER BY interval_datetime) AS nextInterval
         FROM data_table
     ) AS t
WHERE nextInterval IS NULL OR DATEDIFF(second, interval_datetime, nextInterval) > 1800;
10.02.2021
Новые материалы

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

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..