Вычисляемое поле в запросе

Dozent
Дата: 14.05.2012 11:56:42
Товарисчи форумчане, подскажите как сделать, вошем сделал табилцу выходные с одним полем, с датами канкикул

я не заню как записать правильно...

Вот я как думаю, надо барть дату поступления и дату окончания, узнать сколько дней в этой разнице и вычисть количество записей с каникулами из базы как записать?

select count((дата_завершения-дата_поступления)-(select count(дата) where каникулы>=Дата_поступления and каникулы<=Дата_завершения)) from Моя крутая таблица;

Я правильно поинмаю? возможен ли такой вариант записи? правильный ли синтаксис самого запроса?
Модератор: Перестань коверкать слова
WildSery
Дата: 14.05.2012 12:12:44
Dozent,

Вам следует потренироваться выражать свою мысль письменно. Я почти ничего не понял.
Откуда берутся даты поступления и окончания?
Dozent
Дата: 14.05.2012 12:57:24
Извиняюсь, есть база, есть таблица в которой есть поля, одни из них это дата_поступления и дата_завершения, также есть таблица с датами выходных и празничных дней, мне нужно составить скл запрос который бы вычислял колличество дней с даты поступления до даты завершения с учётом праздничных и выходных дней

Моя трудность в том что я не знаю как правильно записать запрос, возможен ли такой вариант запроса

Select Count((Дата_Завершения - Дата_поступления) - (select count(id) where id<=Дата_завершения and id>=Дата_поступления from Таблица1)) from Таблица;

Правильный ли синтаксис запроса, подскажите как правильно записать, пожайлуста...
DarkMaster
Дата: 14.05.2012 13:11:12
Можно примерно так:

create or alter procedure CALCDAYS (
    SDATE date,
    EDATE date,
    INCWEEK smallint,
    INCHOLYDAYS smallint)
returns (
    DCOUNT integer,
    ADDAYS integer,
    WDAYS integer)
AS
begin
  /*считает, сколько дней между датами + включая или нет праздники */
  /* DCOUNT - сколько всего дней
     ADDAYS - кол-во дней, которые попадают на праздничные даты
     WDAYS  - кол-во дней, которые попадают на выходные */
  DCOUNT=0; addays=0; wdays=0;
  if (incweek IS NULL) then incweek=0;
  if (incholydays is null) then incholydays=0;
  if (SDATE IS NULL) then SDATE=CURRENT_DATE;
  if (EDATE IS NULL) then EDATE=CURRENT_DATE;
  while (SDATE<=EDATE) do
    begin
      dcount=dcount+1;
      /* ситуация, когда праздничный день == выходному дню не обыгрываем, т.к. обычно
         предусмотрен перенос рабочих дней */

      /*считаем выходные дни Сб+Вс*/
      if (INCWEEK=1) then
         begin
          if (extract(weekday from :sdate) in (0,1)) then wdays=wdays+1;
         end
      /*считаем праздничные дни*/
      if (incholydays=1) then
         begin
          /* в WEEKDATES храним просто запись в виде (ID,DATE) которая говорит, что это праздничный день */
          if ( exists(select weekdates.id from weekdates where weekdates.wdate=:SDATE) ) then addays=addays+1;
         end
      SDATE=SDATE+1;
    end
  /* Procedure Text */
  suspend;
end
Dozent
Дата: 14.05.2012 13:19:09
Select (DATEDIFF(DAY FROM поступления TO завершиния) - (Select Count(HOLLIDAY) WHERE `holiday` BETWEEN поступления AND завершения from HOLLIDAY)) from Таблица


Так фаирбёрд умеет?
Граур Станислав
Дата: 14.05.2012 13:27:04
Dozent
Моя трудность в том что я не знаю как правильно записать запрос, возможен ли такой вариант запроса

Select Count((Дата_Завершения - Дата_поступления) - (select count(id) where id<=Дата_завершения and id>=Дата_поступления from Таблица1)) from Таблица;



Select Дата_Завершения - Дата_поступления +1 - 
         (select count(id) where id<=Дата_завершения and  id>=Дата_поступления 
          from Таблица1) 
from Таблица;
Dozent
Дата: 14.05.2012 13:46:52
SELECT
 CASE_FULL_NUMBER
,PRIM_ENTRY_DATE
,RESULT_DATE
,(DATEDIFF(DAY,:date1,:date2) - (Select Count(HOLIDAY)from HOLIDAYS_INFO WHERE HOLIDAY BETWEEN :date1 AND :date2 )) AS POLE
FROM G1_CASE
WHERE PRIM_ENTRY_DATE>=:date1 and PRIM_ENTRY_DATE<=:date2;


Вот запрос, ругается на DAY грит что знает такого
Dozent
Дата: 14.05.2012 13:57:25
SELECT
 CASE_FULL_NUMBER
,PRIM_ENTRY_DATE
,RESULT_DATE
,((:date1-:date2) - (Select Count(HOLIDAY)from HOLIDAYS_INFO WHERE HOLIDAY BETWEEN :date1 AND :date2 )) AS F2
FROM G1_CASE
WHERE PRIM_ENTRY_DATE>=:date1 and PRIM_ENTRY_DATE<=:date2;


Как правильно записать вычисление разностИ?
Dimitry Sibiryakov
Дата: 14.05.2012 13:58:45

Dozent
Вот запрос, ругается на DAY грит что знает такого

Потому что ты не посмотрел в документацию прежде чем писать.

Posted via ActualForum NNTP Server 1.5

Dozent
Дата: 14.05.2012 14:04:34
ну функция которую я использую оказывается введена только со 2 верси, а ест ькакоойнить аналог по дверсияю ФБ 1,5?