Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 953

/ вопрос решён /

Доброго времени суток, уважаемые эксперты!
Подскажите, как правильно написать конструкцию SQL запроса.
Есть БД на интербейсе. Туда складываются некие данные - каждые 3 минуты.

Я накатал пока часть проги - но у меня один недостаток. В своем SQL запросе я не смог узнать после группирования - все ли данные существуют на каждые 3 мин. я просто их группирую и суммирую в SQL запросе. Можно ли сделать чтобы я брал откуда-то информацию - "данные не полные на определенное время.".

Приложение:
  1. SSql.Clear;
  2. SSql.Add('SELECT D.DATADATE, sum(D.VALUE0) FROM GRITEMS GI INNER JOIN DATAPW D');
  3. SSql.Add(' ON (GI.CSNO = D.CSNO) AND (GI.SSNO = D.SSNO) AND (GI.MBNO = D.MBNO) AND (GI.PTNO = D.PTNO)');
  4. SSql.Add(Format('WHERE (D.PARAM =%2d)',[PARAM30]));
  5. SSql.Add(Format('AND (GI.GRNO =%2d)',[GRUPNOMER]));
  6. SSql.Add(Format('AND (D.DATADATE>"%s")AND(D.DATADATE<="%s") group BY D.DATADATE'
  7. ,[DateTimeToStr(AVTime[1]),DateTimeToStr(AVTime[2])]));
  8.  
  9.  
  10. Active:=False;
  11. SQL:=SSql;
  12. Active:=True;
  13. FetchAll;
  14. First;
  15. i:=0;
  16. while not Eof do
  17. begin
  18. Inc(i);
  19. MasValue[i]:=Fields[2].AsVariant;
  20. Next; if Eof then break;
  21.  
  22.  
  23. end;
  24.  
  25. SSQL.Free;
  26. except end;
  27. End;
  28.  
  29. /////////////////////////////
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36. SSql.Add(Format('select DATADATE , cnt, sm, case when (cnt < %2d)',[KolKanGr]));
  37. SSql.Add('then 1 else 0 end sm1 from(');
  38. SSql.Add('SELECT D.DATADATE, sum(D.VALUE0) FROM GRITEMS GI INNER JOIN DATAPW D');
  39. SSql.Add(' ON (GI.CSNO = D.CSNO) AND (GI.SSNO = D.SSNO) AND (GI.MBNO = D.MBNO) AND (GI.PTNO = D.PTNO)');
  40. SSql.Add(Format('WHERE (D.PARAM =%2d)',[PARAM30]));
  41. SSql.Add(Format('AND (GI.GRNO =%2d)',[GRUPNOMER]));
  42. SSql.Add(Format('AND (D.DATADATE>"%s")AND(D.DATADATE<="%s") group BY D.DATADATE)'
  43. ,[DateTimeToStr(AVTime[1]),DateTimeToStr(AVTime[2])]));
  44.  
  45. Active:=False;
  46. SQL:=SSql;
  47. Active:=True;
  48. FetchAll;
  49. First;
  50. i:=0;
  51. while not Eof do
  52. begin
  53. Inc(i);
  54. MasValue[i]:=Fields[2].AsVariant;
  55.  
  56. Next; if Eof then break;
  57.  
  58.  
  59. end;
  60.  
  61. SSQL.Free;
  62. except end;
  63. End;
  64.  
  65.  
  66. select DATADATE , cnt, sm, case when cnt <5 then 1 else 0 end sm1
  67. from(
  68. SELECT D.DATADATE,
  69. sum(D.VALUE0*GI.SIGN) sm, count(*) cnt
  70. FROM GRITEMS GI
  71. INNER JOIN
  72. DATAPW D
  73. ON (GI.CSNO = D.CSNO)
  74. AND (GI.SSNO = D.SSNO)
  75. AND (GI.MBNO = D.MBNO)
  76. AND (GI.PTNO = D.PTNO)
  77. WHERE (D.PARAM = 1)
  78. AND GI.GRNO = '170'
  79. AND (D.DATADATE > '23.12.2010')
  80. AND (D.DATADATE <= '24.12.2010')
  81. group BY D.DATADATE)
  82.  
  83.  
  84. Debugger Exception Notification
  85. ---------------------------
  86. Project CHAZ.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error
  87. SQL error code = -104
  88. Invalid command
  89. no column name specified for column number 2 in derived table <unnamed>'.
  90. ---------------------------
  91. Break Continue Help
  92. ---------------------------
  93.  
  94.  


vitalik32 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: vitalik32 (статус: Посетитель)
Вопрос отправлен: 24 января 2011, 15:47
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 2; последнее сообщение — 25 января 2011, 16:03; участников в обсуждении: 2.
Ерёмин А.А.

Ерёмин А.А. (статус: *Администратор), 25 января 2011, 15:52 [#1]:

В запросе это вряд ли можно сделать. Если только завести вторую таблицу со списком всех временных интервалов, а потом через LEFT JOIN подцеплять к ней все данные — тогда если данных нет, строка из первой таблицы всё равно будет выбрана.

Альтернативный вариант — просто цикл в программе по всем интервалам.
vitalik32

vitalik32 (статус: Посетитель), 25 января 2011, 16:03 [#2]:

спасибо, попробую.

25 января 2011, 16:18: Статус вопроса изменён на решённый (изменил автор вопроса — vitalik32)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:51
Выполнено за 0.03 сек.