高分求助 ( 积分: 200 )

  • 主题发起人 主题发起人 小试牛刀
  • 开始时间 开始时间

小试牛刀

Unregistered / Unconfirmed
GUEST, unregistred user!
有个表,表结构如下:
工作项目 开始日期 结束日期 时间数(天)
1 2001-01-01 2001-01-03 2
2 2001-01-02 2001-01-04 2
3 2001-05-06 2001-05-10 4
。 。 。 。
。 。 。 。
求总的时间数(扣除重复占用的时间)。
例如:上表中的总时间应该为7天
 
有个表,表结构如下:
工作项目 开始日期 结束日期 时间数(天)
1 2001-01-01 2001-01-03 2
2 2001-01-02 2001-01-04 2
3 2001-05-06 2001-05-10 4
。 。 。 。
。 。 。 。
求总的时间数(扣除重复占用的时间)。
例如:上表中的总时间应该为7天
 
当前记录中开始时间K和上一记录的结束时间J比较
if K >= J then
总时间数s:=S + 上一记录的总时间+当前记录的总时间
else
IF K < J then
当前记录中的结束时间J1和上一记录的结束时间J比较
IF J1>J then
S:=S + 上一记录的总时间+(J1-K)
如何写循环
 
这样先取数据集
select * from t1 order by 开始时间
first
begin
time := FieldByName('开始时间').asdatetime;
endtime := FieldByName('结束时间').asdatetime;
days := endtime-begin
time
for i := 1 to recordcount-1do
begin
next;
begin
time := FieldByName('开始时间').asdatetime;
if begin
time <= endtime then
begin
begin
time := endtime-一天;
// 如果第二条纪录的开始时间小于上一条纪录的结束时
间,就取结束时间的第二天作为开始时间
end;
endtime := FieldByName('结束时间').asdatetime;
days := days + (endtime - begin
time);
end;
这只是程序框架,具体的自己写吧!
 

select sum(时间数) from table1
计算总天数
再用一条记录的“结束日期”减去上一条记录的“开始日期”,如果是正值,记为0,如果是负值,则累计相差天数
最后总天数减去相差天数就可以了
 
说错了,是用一条记录的“开始日期”减去上一条记录的“结束日期”
 
procedure TForm1.Button1Click(Sender: TObject);
var sql:string;
iDays:integer;
m,n:double;
startDate,EndDate:TDate;
begin
sql:='select sum(时间数) from table1';
ADOQuery1.Close;
self.ADOQuery1.SQL.Text:=sql;
self.ADOQuery1.Open;
self.ADOQuery1.First;
iDays:=self.ADOQuery1.Fields.Fields[0].AsInteger;
self.ADOQuery1.Close;
sql:='select * from table1';
self.ADOQuery1.SQL.Text:=sql;
self.ADOQuery1.Open;
if self.ADOQuery1.IsEmpty then
exit;
self.ADOQuery1.First;
EndDate:=self.ADOQuery1.FieldByName('结束日期').AsDateTime;
self.ADOQuery1.Next;
m:=0.0;
while not self.ADOQuery1.Eofdo
begin
StartDate:=self.ADOQuery1.FieldByName('开始日期').AsDateTime;
n:=StartDate-EndDate;
if n>0 then
n:=0;
m:=m+n;
EndDate:=self.ADOQuery1.FieldByName('结束日期').AsDateTime;
self.ADOQuery1.Next;
end;
iDays:=iDays+round(m);
showmessage(inttostr(idays));
end;
 
写个双重循环
 
首先必须对表按开始时间进行从小到大的排序,再谈其他
 
后退
顶部