проверьте, нет ли дат в таблице mysql для каждой даты для каждой даты [дубликат]

Однажды я решил эту проблему, перемещая все inlines после определения класса и помещая #include для других классов непосредственно перед inlines в файле заголовка , Таким образом, убедитесь, что все определения + встроенные строки заданы до того, как строки синтаксического анализа проанализированы.

Выполнение этого действия позволяет по-прежнему иметь связку строк в обоих (или нескольких) файлах заголовков. .

Как это

// File: A.h
#ifndef __A_H__
#define __A_H__
class B;
class A
{
    int _val;
    B *_b;
public:
    A(int val);
    void SetB(B *b);
    void Print();
};

// Including class B for inline usage here 
#include "B.h"

inline A::A(int val) : _val(val)
{
}

inline void A::SetB(B *b)
{
    _b = b;
    _b->Print();
}

inline void A::Print()
{
    cout<<"Type:A val="<<_val<<endl;
}

#endif /* __A_H__ */

... и делает то же самое в B.h

3
задан pilcrow 12 September 2012 в 03:44
поделиться

3 ответа

  1. CREATE TABLE Days (day DATE PRIMARY KEY);
  2. Заполните Days со всеми днями, которые вы ищете.
    mysql> INSERT INTO Days VALUES ('2011-01-01');
    mysql> SET @offset := 1;
    mysql> INSERT INTO Days SELECT day + INTERVAL @offset DAY FROM Days; SET @offset := @offset * 2;
    
    Затем стрелка вверх и повторите INSERT столько раз, сколько необходимо. Он удваивает количество строк каждый раз, поэтому вы можете получить строки из четырех месяцев в семи INSERT.
  3. Сделайте исключение для поиска дат, для которых нет совпадений в вашей таблице отчетов:
    SELECT d.day FROM Days d 
    LEFT OUTER JOIN Reports r ON d.day = DATE(r.reportdatetime) 
    WHERE d.day BETWEEN '2011-01-01' AND '2011-04-30' 
        AND r.reportdatetime IS NULL;`
    
4
ответ дан Bill Karwin 27 August 2018 в 22:12
поделиться

Если вы имеете в виду, что reportdatetime имеет запись «2 февраля 2011», но другие поля, связанные с этой датой, отсутствуют, например, ниже таблицы snap

reportdate  col1    col2
5/10/2011   abc xyz
2/2/2011        
1/1/2011    bnv oda

, тогда этот запрос работает отлично

select reportdate from dtdiff where reportdate not in (select df1.reportdate from dtdiff df1, dtdiff df2 where df1.col1 = df2.col1)
0
ответ дан Rahul 27 August 2018 в 22:12
поделиться

Это можно сделать с помощью более сложного одиночного запроса, но я покажу псевдо-код с временной таблицей:

Получите все даты, для которых у нас есть записи:

CREATE TEMP TABLE AllUsedDates

SELECT DISTINCT reportdatetime
INTO AllUsedDates;

теперь добавьте 1 мая, поэтому мы отслеживаем 04-30

INSERT INTO AllUsedData ('2011-05-01')

Если на следующий день нет «следующего дня», мы обнаружили пробел:

SELECT A.NEXT_DAY
FROM
    (SELECT reportdatetime AS TODAY, DATEADD(reportdatetime, 1) AS NEXT_DAY FROM AllUsed Dates) AS A
WHERE
    (A.NEXT_DATE NOT IN (SELECT reportdatetime FROM AllUsedDates)
    AND
    A.TODAY <> '2011-05-01') --exclude the last day
0
ответ дан Sunny Milenov 27 August 2018 в 22:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: