SQLite View利用忽略数据值的计算

时间:2014-05-01 16:06:10

标签: database sqlite view sum derived

大家下午好,

使用下面的代码,我创建了一个用于计算每英里平均时间的视图。

CREATE VIEW AverageRunTime AS
SELECT UserDetails.username AS username,
CardiovascularRecords.distance_in_miles AS distance,
CardiovascularRecords.start_time AS starttime,
CardiovascularRecords.end_time AS endtime,
sum(strftime('%s', end_time) - strftime('%s', start_time) / distance_in_miles) AS averagespeedpermile
FROM UserDetails INNER JOIN CardiovascularRecords
ON Userdetails.username=CardiovascularRecords.username

问题我遇到了考虑距离变量的问题,使用了REAL数据类型我有几个十进制值,例如0.1到1的范围。

执行上述总和时,视图将仅显示与整数相关的数据,而忽略任何包含十进制值的记录。

欢迎任何有关此问题的帮助,下面还包含与我的架构相关的代码,以允许其他人复制我的工作。

CREATE TABLE "CardiovascularRecords" ("record_ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE CHECK (record_ID>0) , "distance_in_miles" REAL NOT NULL CHECK (distance_in_miles>0) , "username" TEXT NOT NULL , "date" DATETIME DEFAULT CURRENT_DATE, "notes" TEXT(50), "start_time" TEXT, "end_time" TEXT, FOREIGN KEY(distance_in_miles) REFERENCES DistanceinMiles(distance_in_miles) ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY(username) REFERENCES UserDetails(username) ON DELETE CASCADE ON UPDATE CASCADE)

CREATE TABLE "UserDetails" ("username" TEXT PRIMARY KEY  NOT NULL  UNIQUE  CHECK (length(username)>0), "password" TEXT NOT NULL  CHECK (length(password)>3), "email_address" TEXT NOT NULL  UNIQUE CHECK (length(email_address)>3) , "weight_in_pounds" REAL NOT NULL CHECK(weight_in_pounds>0) CHECK (length(weight_in_pounds)>0), "height_in_inches" REAL NOT NULL CHECK(height_in_inches>0) CHECK (length(height_in_inches)>0), "age" INTEGER CHECK(age>0), WITHOUT ROWID)

提前谢谢。

1 个答案:

答案 0 :(得分:0)

SQLite使用dynamic typing,因此可以将字符串插入distance_in_miles列。

支票distance_in_miles>0无效,因为any string compares larger than any number

修复程序以将值存储为数字。