2016-12-03 7 views
0

CSVファイルに問題がありますが、今はFilehelpersを使用していますが、私は答えが得られる方法を試みています。特定の値を持つcsvから行を選択

私は、CSVは、このようなファイルがあります。

001AD;1234;Window1;;;START;29-11-2016 07:32:00;; 
    001AD;1234;Window1;;;STOP;29-11-2016 07:45:00;13; 
    002BS;1222;;Frezowanie;;START;29-11-2016 07:53:00;; 
    003MR;1243;Window2;;;START;30-11-2016 08:20:00;; 
    002BS;1222;;Frezowanie;;STOP;30-11-2016 11:23:00;210; 
    004DG;Oklejanie;;;;START;01-12-2016 06:33:00;; 

をと私は同じ3つの最初の値を持つ行だけを選択したいのですが、彼らの「STOP」相当するものがありません。この場合、4行目と6行目になります。これを行うオプションはありますか?あなたのユースケースを明示しない限り

+1

最後の行は、不正な形式に見えるかの行が最終ライン一様 – Plutonix

+0

ではないことは、第二の方法は、それが好きで持っている、このようなものです: 004DG ;;; Oklejanie ;; START; 01-12-2016 06:33:00 ;;それが何か変更された場合 –

+0

コードを見る必要があり、次に何をすべきかについてより良い提案をすることができます。 – tjcertified

答えて

1

、私はSQLiteの溶液で行く:

SQL Fiddle

最初

はあなたがimport your CSV file

は、その後、次のクエリを実行する必要があります

SQLite(SQL.js)スキーマの設定

CREATE TABLE t 
    ("a" TEXT(5), "b" TEXT(9), "c" TEXT(7), "d" TEXT(10), "e" INTEGER, "f" TEXT(5), "g" TEXT(19), "h" INTEGER) 
; 

INSERT INTO t 
    ("a", "b", "c", "d", "e", "f", "g", "h") 
VALUES 
    ('001AD', '1234', 'Window1', NULL, NULL, 'START', '29-11-2016 07:32:00', NULL) 
; 
-- ... 

クエリ1

select sta.* 
from (
     select * 
     from t 
     where f = "START" 
    ) sta 
LEFT JOIN (
     select * 
     from t 
     where f = "STOP" 
    ) sto 
    ON (
     sta.a = sto.a 
     OR (
      sta.a IS NULL 
      AND sto.a IS NULL 
      ) 
     ) 
    AND (
     sta.b = sto.b 
     OR (
      sta.b IS NULL 
      AND sto.b IS NULL 
      ) 
     ) 
    AND (
     sta.c = sto.c 
     OR (
      sta.c IS NULL 
      AND sto.c IS NULL 
      ) 
     ) 
WHERE 
    sto.f IS NULL 

Results

|  a |   b |  c |  d |  e |  f |     g |  h | 
|-------|-----------|---------|--------|--------|-------|---------------------|--------| 
| 003MR |  1243 | Window2 | (null) | (null) | START | 30-11-2016 08:20:00 | (null) | 
| 004DG | Oklejanie | (null) | (null) | (null) | START | 01-12-2016 06:33:00 | (null) | 
関連する問題