我必须从两个表中读取数据并将其写入csv文件。 表格结构如下:
表结构如下所示。
1) pressure_table 2) Daily Weather Information
Date | TimeStamp | Pressure WForecastDate | TimeStamp | RegionId | Temp | WindSpeed | Humidity
------------------------------------- ---------------------------------
2016-08-16 | 1 | 1000 2016-08-16 | 1 | 100 | 23 | 123 |23
2016-08-16 | 2 | 2000 2016-08-16 | 2 | 100 | 24 | 123 |24
2016-08-16 | 3 | 3500 2016-08-16 | 3 | 100 | 24 | 123 |22
2016-08-16 | 4 | 4000 2016-08-16 | 4 | 100 | 23 | 123 |21
2016-08-16 | 5 | 5000 2016-08-16 | 5 | 100 | 25 | 123 |27
2016-08-16 | 6 | 6000 2016-08-16 | 6 | 100 | 24 | 123 |26
2016-08-16 | 7 | 7000 2016-08-16 | 7 | 100 | 22 | 123 |27
2016-08-16 | 8 | 8000 2016-08-16 | 8 | 100 | 21 | 123 |26
2016-08-16 | 9 | 1200 2016-08-16 | 9 | 100 | 20 | 123 |23
2016-08-16 | 10 | 1289 2016-08-16 | 1 | 101 | 23 | 123 |22
2016-08-16 | 11 | 2312 2016-08-16 | 2 | 101 | 22 | 123 |21
2016-08-16 | 12 | 7878 2016-08-16 | 3 | 101 | 21 | 123 |27
2016-08-16 | 13 | 7676 2016-08-16 | 4 | 101 | 22 | 123 |25
2016-08-16 | 14 | 1256 2016-08-16 | 5 | 101 | 21 | 123 |23
2016-08-16 | 15 | 5676 2016-08-16 | 6 | 101 | 21 | 123 |24
............................ .................................
............................ .................................
2016-08-16 | 96 | 6541
我必须按以下格式创建csv:
“DATE”, “时间戳”, “压力”, “Temp.100”, “Temp.101”,WindSpeed.100" , “WindSpeed101”,Hum101,Hum102
“2016年1月8日”,1,234,23,12,12,34,21,22
“2016年1月8日”,2,233,23,12,12,34,21,22
“2016年1月8日”,3,121,23,12,12,34,21,22
“2016年1月8日”,4,124,23,12,12,34,21,22
“2016年1月8日”,5,123,23,12,12,34,21,22
“2016年1月8日”,6,126,23,12,12,34,21,22
“2016年1月8日”,7,893,23,12,12,34,21,22
.....................................
共计96个街区
.....................................
“2016年1月8日”,96,893,23,12,12,34,21,22
我需要做的是从 压力表 中获取所有 日期,时间戳和压力 信息即;所有96个时间戳和区域100,101的 温度,湿度和风速 信息以及来自 *每日天气信息* *的相同日期和时间戳* 表格在一行中。
目前我正在做的是运行以下sql查询。
SELECT Date,TimeStamp,Pressure FROM load_data_demand where date='2016-08-16'order by Date,TimeStamp;
迭代resultSet并将 Date,TimeStamp和Pressure 附加到文件中,然后执行以下查询以获取区域温度,湿度和风速信息
SELECT temp,WindSpeed,humidity FROM daily_weather_information where regionId=100 and Wforecastdate='2016-08-16' and timeStamp=1;
SELECT temp,WindSpeed,humidity FROM daily_weather_information where regionId=101 and Wforecastdate='2016-08-16' and timeStamp=1;
将获取的信息附加到文件中。
我的代码按预期生成csv文件,但运行的查询太多。任何人都可以给我一个查询上面的场景,可以生成查询数量较少或单个查询的结果集。
答案 0 :(得分:0)
/*
http://stackoverflow.com/questions/39011220/read-data-from-two-tables-and-writing-into-csv
create table pressure_table(`Date` date , TimeStamp int , Pressure int);
truncate table pressure_table;
insert into pressure_table values
('2016-08-16' , 1 , 1000),
('2016-08-16' , 2 , 2000),
('2016-08-16' , 3 , 3500),
('2016-08-16' , 4 , 4000),
('2016-08-16' , 5 , 5000),
('2016-08-16' , 6 , 6000),
('2016-08-16' , 7 , 7000),
('2016-08-16' , 8 , 8000),
('2016-08-16' , 9 , 1200),
('2016-08-16' , 10 , 1289),
('2016-08-16' , 11 , 2312),
('2016-08-16' , 12 , 7878),
('2016-08-16' , 13 , 7676),
('2016-08-16' , 14 , 1256),
('2016-08-16' , 15 , 5676);
create table Daily_Weather_Information(WForecastDate date , TimeStamp int, RegionId int , Temp int, WindSpeed int , Humidity int);
truncate table daily_weather_information;
insert into daily_weather_information values
('2016-08-16' , 1 , 100 , 23 , 123 ,23),
('2016-08-16' , 2 , 100 , 24 , 123 ,24),
('2016-08-16' , 3 , 100 , 24 , 123 ,22),
('2016-08-16' , 4 , 100 , 23 , 123 ,21),
('2016-08-16' , 5 , 100 , 25 , 123 ,27),
('2016-08-16' , 6 , 100 , 24 , 123 ,26),
('2016-08-16' , 7 , 100 , 22 , 123 ,27),
('2016-08-16' , 8 , 100 , 21 , 123 ,26),
('2016-08-16' , 9 , 100 , 20 , 123 ,23),
('2016-08-16' , 1 , 101 , 23 , 123 ,22),
('2016-08-16' , 2 , 101 , 22 , 123 ,21),
('2016-08-16' , 3 , 101 , 21 , 123 ,27),
('2016-08-16' , 4 , 101 , 22 , 123 ,25),
('2016-08-16' , 5 , 101 , 21 , 123 ,23),
('2016-08-16' , 6 , 101 , 21 , 123 ,24);
*/
select p.`date`,p.timestamp,p.pressure,
max(case when regionid = 100 then temp else 0 end) as temp100,
max(case when regionid = 101 then temp else 0 end) as temp101,
max(case when regionid = 100 then windspeed else 0 end) as windspeed100,
max(case when regionid = 101 then windspeed else 0 end) as windspeed101,
max(case when regionid = 100 then humidity else 0 end) as humidity100,
max(case when regionid = 101 then humidity else 0 end) as humidity101
from pressure_table p
join daily_weather_information i on i.timestamp = p.timestamp
group by p.`date`,p.timestamp,p.pressure
order by p.`date`,p.timestamp,p.pressure
答案 1 :(得分:-3)
有很多种可能性。如果您尝试通过attribut" date"来加入这两个表格。
所以你可以在一个查询中这样做:
SELECT Date,TimeStamp,Pressure,temp,WindSpeed,humidity FROM
load_data_demand l, daily_weather_information d
WHERE l.Date = d.WForecastDate
AND d.timeStamp = 1
AND (d.RegionId = 100 OR d.RegionId=101)
order by l.Date, d.Timestamp