因此,我有下表:
CREATE TABLE response (response_id INT, utime INT,
question_id INT, response VARCHAR(500))
INSERT INTO response (response_id, utime, question_id, response)
VALUES (5,1459542506,11,1),(5,1459542506,12,0),(5,1459542506,13,0),
(5,1459542506,14,0),(5,1459542506,15,0),(7,1458210291,11,0),(7,1458210291,12,1),
(7,1458210291,13,1),(7,1458210291,14,0),(7,1458216077,15,1),(10,1458212391,11,1),
(10,1458212391,12,0),(10,1458212391,13,1),(10,1458212391,14,0),(10,1458212391,15,0)
哪个商店调查人们在指定时间内的活动反应。每个question_id
代表五种可能性中的一个问题。对用户的响应指示了他从所有可能性中的选择。他/她没有回答的地方被认为是假的。
question_id | activity
------------+----------
11 - sitting
12 - walking
13 - standing
14 - running
15 - jogging
这些回答存储在列response
中,用于每个问题的值。例如,response_id=5
的反应是坐着,没有其他活动,response_id=7
是走路、站着、慢跑。
不幸的是,在源表中,response
被定义为类型VARCHAR
,而不是BOOLEAN
。
我想创建一个新的表,描述报告此类活动的每个response
的活动。我的做法如下:
CREATE TABLE target_table AS
SELECT response_id, to_timestamp(utime), response = 'true' activity
FROM response;
=> SELECT 15
-- but then
SELECT * FROM target_table WHERE activity IS TRUE
=> SELECT 0
同样,活动列值均报告为f
response_id activity_day activity
5 2016-04-01 21:28:26+01 f
5 2016-04-01 21:28:26+01 f
5 2016-04-01 21:28:26+01 f
所需输出
我想在中有target_table
response_id | activity_day | activity
-------------+---------------------+---------
5 2016-04-01 21:28:26 sitting
7 2016-03-17 10:24:51 walking
7 2016-03-17 10:24:51 standing
7 2016-03-17 10:24:51 jogging
10 2016-03-17 10:59:51 sitting
10 2016-03-17 10:59:51 standing
....
注意:我提供这个dbfiddle
创建这样的target_table:
CREATE TABLE target_table AS
SELECT response_id, to_timestamp(utime) AS activity_day, response = '1' activity
FROM response
在此之后,选择TRUE答案:
SELECT * FROM target_table WHERE activity
请参阅:DBFIDDLE
这个新表(target_table(将由以下列创建:
select
column_name,
data_type
from information_schema.columns
where table_name='target_table';
输出:
column_name | 数据类型 |
---|---|
response_id | integer |
activity_day | 带时区的时间戳 |
活动 | 布尔值 |