我正在尝试创建一个报告,计算每天有多少人登录某个部分或退出某个部分。
package query;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.*;
import java.io.*;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
public class Stockquery {
public static void main(String[] args) {
String jsonString = callURL(
"https://www.quandl.com/api/v3/datasets/SSE/HYQ.json?start_date=2017-01-01&end_date=2017-01-31");
try {
JSONObject jsonobjects = new JSONObject(jsonString);
JSONObject dataset = jsonobjects.getJSONObject("dataset");
JSONArray array = dataset.getJSONArray("data");
System.out.println(array.get(2));
System.out.println(array.get(3));
array.getString(0);
System.out.println(array.getString(0));
} catch (JSONException e) {
e.printStackTrace();
}
}
public static String callURL(String myURL) {
// System.out.println("Requested URL:" + myURL);
StringBuilder sb = new StringBuilder();
URLConnection urlConn = null;
InputStreamReader in = null;
try {
URL url = new URL(myURL);
urlConn = url.openConnection();
if (urlConn != null)
urlConn.setReadTimeout(60 * 1000);
if (urlConn != null && urlConn.getInputStream() != null) {
in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
BufferedReader bufferedReader = new BufferedReader(in);
if (bufferedReader != null) {
int cp;
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
bufferedReader.close();
}
}
in.close();
} catch (Exception e) {
throw new RuntimeException("Exception while calling URL:" + myURL, e);
}
return sb.toString();
}
示例数据:
select inout.name_id, nametable.name, inout.datetime, inout.status, inout.section
from inout
join nametable on inout.name_id = nametable.name_id
where inout.date between '1/1/2016' and '1/3/2016'
order by inout.date
然后是最终结果:
Datetime Name Section Status
1/1/2016 1:34:56 John A IN
1/1/2016 4:11:11 Steve A OUT
1/1/2016 18:20:20 Bill A IN
1/2/2016 13:13:13 John A OUT
1/2/2016 12:12:12 Ben A IN
1/3/2016 1:01:01 JIM A IN
编辑:认为IN状态会给运行计数+1,而OUT会给-1,所以如果一个人上班或离开工作当天我可以看到有多少人在特定部分工作那天,我不太确定如何在那个日期范围之前为那些人展示。
答案 0 :(得分:0)
这不是一个答案,但可以帮助其他人形象化,并可能激励你(但我认为你确实尝试过):
if {inout.status} = "IN" then 1 else -1
。让我们说它的名字是@Quantifier。正如你所说的那样,结果并不是你想要的,因为有这样的"史蒂夫出去"没有先前的"史蒂夫在"。所以它仍然需要一个技巧。
要在解决方案中将其关闭,您可以尝试其他查询来获取初始计数。尝试一下:
select sum(case when status='IN' then 1 else -1 end)
from inout
join nametable on inout.name_id = nametable.name_id
where inout.datetime < '2016-1-1'
然后在最终结果中考虑这个初始值。