PostgreSQL и последовательные данные

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

Рассматривают это: ресурсы встраиваются в EXE или DLL. Когда некоторый код в статических вызовах библиотеки (например). LoadIcon, это получит ресурсы от EXE или DLL, с которым это связано.

Так, если Ваша статическая библиотека требует, чтобы ресурсы были доступны, у Вас есть несколько опций:

  1. Вы можете сделать, чтобы библиотека создала их на лету и затем использовала (например). CreateDialogIndirect. Посмотрите, что Raymond Chen "Создает диалоговый шаблон во времени выполнения" .
  2. у Вас могут быть они встроенный в библиотеку как простые массивы (т.е.). char my_dialog_resource[] = { .... };, и затем используют (например). CreateDialogIndirect. Необходимо будет, вероятно, найти (или запись) утилиту, которая преобразовывает от .RES файлы к .CPP файлы.
  3. можно поставить Библиотечный файл со сценарием ресурса (.RC файл) и соответствующий заголовочный файл. Вы затем #include их как релевантный. Необходимо будет зарезервировать диапазон идентификаторов ресурса для LIB для использования, так, чтобы они не сталкивались с теми из основного EXE или DLL. Это - то, что делает MFC при использовании в качестве статической библиотеки. Или можно использовать идентификаторы строкового ресурса (это не работает на STRINGTABLE ресурсы).
  4. Ваша статическая библиотека может поставить с отдельным ресурсом DLL.

5
задан warren 5 October 2009 в 01:36
поделиться

3 ответа

Просто создайте функцию в plsql или в клиенте, которая будет проверять все даты. Например, этот псевдокод:

date checked_date = 2000-01-01;
int unchecked_section = 0;
while ( checked_date <= today() ) {
  if (! sql(select itemName from Table where itemName=checked_date)) {
    unchecked_section++;
  } else {
    if ( unchecked_section>=n ) {
      print checked_date-unchecked_section, checked_date
    }
    unchecked_section = 0;
  }
  checked_date++;
}
if ( unchecked_section ) {
  print checked_date-unchecked_section, checked_date
}

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

1
ответ дан 13 December 2019 в 05:38
поделиться

Если вы можете использовать PostgreSQL 8.4, тогда оконные функции помогут:

SELECT *
    FROM (SELECT itemName, date, date - lag(date) OVER w AS gap
              FROM someTable WINDOW w AS (ORDER BY date)
         ) AS pairs
    WHERE pairs.gap > '1 day'::interval;
10
ответ дан 13 December 2019 в 05:38
поделиться

После некоторого тестирования я придумал следующий оператор SQL:

SELECT date, itemName
  FROM "Table" as t1
  WHERE NOT EXISTS (
     SELECT date 
     FROM "Table" as t2 
     WHERE t2.date = (t1.date - INTERVAL '1 day')
  )
  ORDER BY date
  OFFSET 1  -- this will skip the first element

Это даст вам все строки, у которых нет прямого преемника.

Если вы измените оператор на:

SELECT date, itemName
  FROM "Table" as t1
  WHERE NOT EXISTS (
    SELECT date 
    FROM "Table" as t2 
    WHERE (t2.date >= (t1.date - INTERVAL '2 day'))
    AND (t2.date < t1.date)
  )
  ORDER BY date
  OFFSET 1

вы можете использовать длину INTERVAL в предложении WHERE подзапроса для фильтрации по пробелам не менее этого размера.

Надеюсь, что это поможет.

1
ответ дан 13 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

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