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

SQL DATEDIFF для несмежных дат

У меня есть таблица, которая выглядит так:

Code    Mark Date   Notional
Beta    5/1/2008    $1,102,451.00
Beta    5/2/2008    $1,102,451.00
Beta    5/5/2008    $1,102,451.00
Beta    5/6/2008    $1,102,451.00

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

SELECT 
    Current.[Mark Date],
    Prev.[Mark Date],
    (DATEDIFF("d", Prev.[Mark Date], Current.[Mark Date])/365)

FROM Notional as Prev, Notional as Current
WHERE (Prev.[Mark Date] = (Current.[Mark Date]-1));

Однако этот SQL не будет присоединяться, например, в выходные 05.05.2008 -> 02.05.2008 или в длинные выходные. Как мне заставить таблицу самостоятельно соединяться по несмежным датам? Спасибо за помощь!

23.11.2009

  • Мне просто интересно об этом. Есть ли таблица с именем Notional и поле с именем Notional? Кроме того, что вы имеете в виду, когда говорите, что этот SQL не присоединится? Можете ли вы привести пример? 23.11.2009
  • Не можете ли вы использовать оператор CASE в день недели, чтобы присоединиться к понедельнику и пятнице со вторника по понедельник, со среды по вторник и т. д. и т. д. 06.09.2012

Ответы:


1

Единственный способ сделать это — использовать ROW_NUMBER (и ROW_NUMBER+1) для выбора, упорядоченного по дате, для SQL, который поддерживает номера строк, ИЛИ для создания временной таблицы с ключом автоинкремента, который вы заполняете в порядке дат.

Нет другого способа, не прибегая к решению без соединения (это цикл).

23.11.2009
  • Хорошо, да, мне нужно создать временную таблицу с ключом автоматического увеличения, потому что я использую ACCESS 2007... есть идеи, как это сделать? 23.11.2009
  • не сразу пришло мне в голову - я верю, что при доступе вы используете ключевое слово auto при объявлении таблицы. убедитесь, что если вы создаете временную таблицу, вы не помещаете все поля во временную таблицу - лучше всего иметь временную таблицу с двумя полями - autoinckey и внешний ключ (внешний ключ указывает на ключ условной таблицы). Это будет быстрее. 23.11.2009
  • Это неправда. Это можно сделать без использования циклов. Пожалуйста, смотрите мой ответ для краткого описания 24.11.2009

  • 2

    Вы можете попробовать использовать ROW_NUMBER при выборе и присоединении к этому заказу до указанной даты.

    РЕДАКТИРОВАТЬ. С соединениями покончено.

    Что вы можете сделать, так это присоединить таблицу к самой себе, в даты, превышающие эту строку, а затем сгруппировать и выбрать мин.

    Что-то вроде этого

    DECLARE @Table TABLE(
            DateVal DATETIME
    )
    
    INSERT INTO @Table SELECT '01 May 2009'
    INSERT INTO @Table SELECT '02 May 2009'
    INSERT INTO @Table SELECT '05 May 2009'
    INSERT INTO @Table SELECT '06 May 2009'
    
    SELECT  t.DateVal,
            MIN(tNext.DateVal) NextDate
    FROM    @Table t LEFT JOIN
            @Table tNext ON t.DateVal < tNext.DateVal
    GROUP BY t.DateVal
    

    Я знаю, что это код Sql Server, но его легко изменить на MS Access.

    Это должно вернуть следующее:

    StartDate                  EndDate
    2009-05-01 00:00:00.000 2009-05-02 00:00:00.000
    2009-05-02 00:00:00.000 2009-05-05 00:00:00.000
    2009-05-05 00:00:00.000 2009-05-06 00:00:00.000
    2009-05-06 00:00:00.000 NULL
    
    23.11.2009
    Новые материалы

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

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

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

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

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

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

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