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

SQL - Как дублировать строки, но изменить информацию только об одном столбце?

Таблица tblWeeks имеет номер недели и дату столбца (только каждый четверг). Вот так:

WeekNum    Date
1496       2015-7-2
1497       2015-7-9
1498       2015-7-16

Функция fnBenchmarkData будет возвращать данные за неделю на основе указанного параметра weeknum.

Я использовал cross-apply для отображения контрольных данных за ВСЕ недели:

SELECT p.weeknum, p.date, q.Key, q.ID, q.Score      
FROM tblWeeks AS p 
cross apply 
fnBenchmarkData(p.weeknum) as q

Теперь моя проблема заключается в том, что данные о счете, генерируемые функцией, и номер недели будут обновляться каждый четверг и оставаться неизменными до следующей среды, т. е. четверг — следующая среда является «циклом», и все данные о счете одинаковы, номер недели у меня так же. Однако функция вернется только в четверг.

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

Например, ниже показано, что я получаю от cross-apply:

WeekNum    Date              Score
1496       2015-7-2 (Thur)     1
1497       2015-7-9 (Thur)     5   
1498       2015-7-16(Thur)     7
....

Я хочу, чтобы мой перекрестный SQL возвращал что-то вроде этого:

WeekNum    Date              Score
1496       2015-7-2 (Thur)     1
1496       2015-7-3            1
                                     /* No data stored for weekend 
1496       2015-7-6            1   
1496       2015-7-7            1   
1496       2015-7-8            1

1497       2015-7-9 (Thur)     5
1497       2015-7-10           5

1497       2015-7-13           5   
1497       2015-7-14           5
1497       2015-7-15           5

1498       2015-7-16(Thur)     7  

Кто-нибудь знает, как это сделать? Огромное спасибо!


Ответы:


1

Я думаю, что самый простой способ - использовать cross join для добавления дополнительных строк.

SELECT p.weeknum, dateadd(day, n.n, p.date) as date, q.Key, q.ID, q.Score      
FROM tblWeeks p cross apply 
     fnBenchmarkData(p.weeknum) q cross join
     (select 0 as n union all select 1 as n union all select 2 union all select 3 union all
      select 4 union all select 5 union all select 6
     ) n;
07.07.2015
  • Вместо многих союзов вы можете использовать cross join (VALUES(0),(1),(2),(3),(4),(5),(6),(7)) n(n); 08.07.2015
  • @Shnugo, но для этого потребуется как минимум SQL Server 2008, не так ли? 08.07.2015

  • 2

    Вы можете попробовать использовать приведенный ниже сценарий SQL, пытаясь связать его с требованием. Обновите сценарий plz в соответствии с вашими потребностями.

    CREATE FUNCTION fnBenchmarkData(@WeekNum INT,@BDate  DATETIME,@Score INT)
    RETURNS @RtnValue TABLE 
    (
        WeekNum INT,
        BDate DATETIME,
        Score DATETIME
    ) 
    AS
    BEGIN
        -- NO DATA For Weekend
        IF(DatePart(WEEKDAY,@BDate) <> 1 AND DatePart(WEEKDAY,@BDate) <> 7)
        BEGIN
            INSERT INTO @RtnValue VALUES(@WeekNum,@BDate,@Score)
            -- Repeat For Thursday
            IF(DatePart(WEEKDAY,@BDate)) =5 --Thu repeat row
            BEGIN
                INSERT INTO @RtnValue VALUES(@WeekNum,@BDate,@Score)
            END
        END 
        RETURN
    END
    GO
    

    Оцените вывод функции с помощью скрипта

    Select * From dbo.fnBenchmarkData(1496,'2015-07-09',1)
    Select * From dbo.fnBenchmarkData(1496,'2015-07-08',1)
    Select * From dbo.fnBenchmarkData(1496,'2015-07-11',1)   
    

    Теперь, как вы предложили в своем запросе, используйте перекрестное применение и передайте ожидаемый параметр и используйте вывод функции в команде выбора.

    08.07.2015
    Новые материалы

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

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

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

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

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

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

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