ここから行けるかわかりません。実際に転送を実行するプログラムからのエラーコードを記録したほうがよい場合があります。
あなたが今持っているテーブルにはいくつかの問題があります。
CREATE TABLE filelog (
folder text,
filename text,
datatime timestamp,
filesize integer,
filesource text);
-- Your failed transfer . . .
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:01:02',10,'S1');
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:03:02',10,'S2');
-- . . . and a duplicate of it.
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:01:02',10,'S1');
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:03:02',10,'S2');
私のテーブル名を置き換えて、あなたのクエリは
select folder, filename, count()
from filelog group by folder, filename having count() < 3;
上記のデータでは、2つの失敗があったとしても、クエリは行を返しません。(または1つの障害の2つのコピー。)それを修正する最初のステップは、防御可能な主キーを宣言することです。
CREATE TABLE filelog (
folder text,
filename text,
datatime timestamp,
filesize integer,
filesource text,
primary key (folder, filename, datatime)
);
その主キーの制約により、1回の転送を2回入力することはできなくなります。同じファイルを1日に複数回転送できます。これは、最初の転送が失敗したときに意味がある場合があります。
-- Your failed transfer . . .
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:01:02',10,'S1');
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-29 23:03:02',10,'S2');
-- . . . and an earlier transfer that also failed.
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-23 23:01:02',10,'S1');
INSERT INTO "filelog" VALUES('folder1','file1','2012-08-23 23:03:02',10,'S2');
クエリは再び行を返しません。転送の成功と失敗をより適切に定義する必要があります。
転送の成功にはこれらの特徴があるようです。
- これには、S1、S2、およびS3の3つのソースすべてが含まれます。
- これは単一のパス名用です。パス名はフォルダ+ディレクトリ区切り文字+ファイル名を意味します。
- タイムスタンプはファイルソースの順序に従います。つまり、S1の「datatime」はS2の「datatime」の前にあり、S2の「datatime」はS3の「datatime」の前にあります。
- 一意の{folder、filename、datatime}の場合、バイト数は3つのファイルソースすべてで同じです。
そして*大きくて面倒な特徴。。。
単一のファイル転送の3つの行はすべて、単一の「バッチ」に属している必要があります(より適切な単語がないため)。つまり、タイムスタンプが正しい順序で転送されたバイトが正しい場合でも、クエリグループを下の最初の2行(転送の失敗)と下の最後の行(転送の成功の一部)にまとめてはなりません。 。
folder1 file1 2012-08-29 23:01:02 10 S1
folder1 file1 2012-08-29 23:03:02 10 S2
folder1 file1 2012-08-29 23:45:02 10 S1
folder1 file1 2012-08-29 23:48:02 10 S2
folder1 file1 2012-08-29 23:53:02 10 S3
これはやや複雑になります。そして、私はあなたの転送成功の基準を完全に誤解したかもしれません。
(おそらく、「datatime」列のより適切な名前を思い付くことができます。)