ある場合:和データ日付範囲が、私はこのような2つのクエリの結果持っているSQL Serverで別のテーブルに
を私はこの2つのクエリを使用したいと思いますし、その後その特定のデバイス(この場合は43)が、その期間の最初のテーブルの日付範囲で左右の日付制限を使用して接続されていれば、2番目のテーブルの秒数をSUMします(この場合はMain - Charging)。したがって、その条件が満たされている場合のみSUM。
私はこれをどのように達成することができますか?
これは、テーブル・スクリプトといくつかのサンプルデータです:
まずテーブル・スクリプト:
CREATE TABLE firstTable(
DeviceId INTEGER NOT NULL
,Date DATE NOT NULL
,DisplayValue VARCHAR(16) NOT NULL
,LeftLimit DATETIME NOT NULL
,RigthLimit DATETIME NOT NULL
,Seconds INTEGER NOT NULL
);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 00:00:00.000','2017-06-27 10:17:54.460',37074);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:54.460','2017-06-27 10:17:56.293',2);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:56.293','2017-06-27 10:17:56.330',0);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:56.330','2017-06-27 10:17:57.430',1);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:57.430','2017-06-27 10:17:57.440',0);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:57.440','2017-06-27 10:17:58.637',1);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:58.637','2017-06-27 10:17:58.783',0);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:58.783','2017-06-27 10:17:59.657',1);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:59.657','2017-06-27 10:17:59.903',0);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:17:59.903','2017-06-27 10:18:00.977',1);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:18:00.977','2017-06-27 10:18:01.027',1);
INSERT INTO firstTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Connected','2017-06-27 10:18:01.027','2017-06-27 10:18:01.517',0);
セカンドテーブル・スクリプト:
CREATE TABLE secondTable(
DeviceId INTEGER NOT NULL
,Date DATE NOT NULL
,DisplayValue VARCHAR(16) NOT NULL
,LeftLimit DATETIME NOT NULL
,RigthLimit DATETIME NOT NULL
,Seconds INTEGER NOT NULL
);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 00:00:00.000','2017-06-27 10:17:57.523',37077);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:17:57.523','2017-06-27 10:17:59.883',2);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:17:59.883','2017-06-27 10:17:59.953',0);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:17:59.953','2017-06-27 10:18:01.043',2);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:18:01.043','2017-06-27 10:18:01.103',0);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:18:01.103','2017-06-27 10:18:01.553',0);
INSERT INTO secondTable(DeviceId,Date,DisplayValue,LeftLimit,RigthLimit,Seconds) VALUES (43,'2017-06-27','Mains - Charging','2017-06-27 10:18:01.553','2017-06-27 10:18:01.630',0);
期待される結果:
CREATE TABLE expectedResult(
DeviceId INTEGER NOT NULL
,LeftLimit DATETIME NOT NULL
,RigthLimit DATETIME NOT NULL
,TotalSeconds INTEGER NOT NULL
);
INSERT INTO expectedResult(DeviceId,LeftLimit,RigthLimit,TotalSeconds) VALUES (43,'2017-06-27 00:00:00.000','2017-06-27 10:18:02.630',37081);
期待される再SULT表:
+----------+-------------------------+-------------------------+--------------+
| DeviceId | LeftLimit | RightLimit | TotalSeconds |
+----------+-------------------------+-------------------------+--------------+
| 43 | 2017-06-27 00:00:00.000 | 2017-06-27 10:18:02.630 | 37081 |
+----------+-------------------------+-------------------------+--------------+
言葉で...ハァッ??? –
@SeanLange IE:例えば、00:00〜10:18:01:517デバイス43が「接続済み」だったためです。時間間隔が最初のテーブルの間隔の場合は、2番目のテーブルから「秒」を合計します。だから私は2番目のテーブルからレコード1,2,3,4,5,6を合計します。 – legollas007
あなたがここでやろうとしていることはまったく明確ではありません。ここでは、この質問の改善を開始するのに最適な場所です。 https://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –