私の目標は、それぞれについて、「 want」と「want2 」の値をPID
持つ 2 つのレコードを同じに発生するように選択することです。両方を含む 最初の 5 に対してこれを行います。test_sname
entry_date
entry_dates
test_snames
これは、これを達成するための私のクエリです:
queryBuilder =
"""select PID, test_sname, test_value, units, ref_range, entry_date from labs
where PID=%s and (test_sname='want' or test_sname='want2') and entry_date in
(select entry_date from labs where PID=%s and test_sname in ('want', 'want2')
group by entry_date having count(*) = 2)
order by entry_date limit 10;""" % (pid, pid)
test_sname
entry_dateに「want」または「want2 」を含む行が 2 つしかない場合、期待どおりに機能します。
PID |test_sname |test_value |units |entry_date
10000000 | want | 343 | U/L | 2008-01-01 01:01:01
10000000 | want2 | 984.34 | | 2008-01-01 01:01:01
10000000 | NA1 | 56 | % | 2008-01-01 01:01:01
10000000 | NA2 | 420 | mg/dL | 2008-01-01 01:01:01
10000000 | NA2 | 420 | mg/dL | 2008-01-02 01:01:01
10000000 | want | 343 | U/L | 2008-01-02 01:01:01
10000000 | want2 | 984.34 | | 2008-01-02 01:01:01
10000000 | NA1 | 26 | % | 2008-01-02 01:01:01
10000000 | NA2 | 410 | mg/dL | 2008-01-02 01:01:01
10000000 | NA2 | 455 | mg/dL | 2008-01-02 01:01:01
クエリの結果 (正しい):
PID |test_sname |test_value |units |entry_date
10000000 | want | 343 | U/L | 2008-01-01 01:01:01
10000000 | want2 | 984.34 | | 2008-01-01 01:01:01
10000000 | want | 343 | U/L | 2008-01-02 01:01:01
10000000 | want2 | 984.34 | | 2008-01-02 01:01:01
問題は、たとえば、同じ entry_date にtest_sname
' wanthaving count(*) = 2
' から複数の行がある場合に発生します。これは、が有効でなくなったためです。このようなデータの結果はありません。
PID |test_sname |test_value |units |entry_date
11111111 | want | 343 | U/L | 2009-10-26 07:25:00
11111111 | want2 | 984.34 | | 2009-10-26 07:25:00
11111111 | want | 189 | U/L | 2009-10-26 07:25:00
11111111 | NA1 | 50 | % | 2009-10-26 07:25:00
11111111 | NA2 | 40 | mg/dL | 2009-10-26 07:25:00
11111111 | NA3 | 84.55 | | 2009-10-26 07:25:00
11111111 | NA4 | 4.5 | thou/uL | 2009-10-26 07:25:00
11111111 | NA5 | 14.6 | g/dL | 2009-10-26 07:25:00
11111111 | NA6 | 0.96 | mg/dL | 2009-10-26 07:25:00
11111111 | want | 343 | U/L | 2009-10-30 07:25:00
11111111 | want2 | 984.34 | | 2009-10-30 07:25:00
11111111 | want | 189 | U/L | 2009-10-30 07:25:00
11111111 | NA1 | 6 | % | 2009-10-30 07:25:00
11111111 | NA2 | 40 | mg/dL | 2009-10-30 07:25:00
11111111 | NA3 | 84.55 | | 2009-10-30 07:25:00
11111111 | NA4 | 4.5 | thou/uL | 2009-10-30 07:25:00
11111111 | NA5 | 14.6 | g/dL | 2009-10-30 07:25:00
11111111 | NA6 | 0.96 | mg/dL | 2009-10-30 07:25:00
制限として、サブクエリに a を入れてみlimit 2
ましたが(それだけでは問題が解決しないことはわかっています)、このエラーが発生し、SQLの最新バージョンを持っていると思ったので、どうやらできませんlimit
サブクエリで使用します。
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
これを修正するには複数の方法があることを認識しています-すべての値を選択してから、Pythonで必要なものをプログラムで取得できますが、Python mySQL-connectorを使用して記述されたmySQLクエリソリューションを探しています. ただし、Python ソリューションについて文句を言うつもりはありません。
mySQL-connector v2.1.3およびMySQLサーバーv5.7.11でpython v3.4.4を使用しています
御時間ありがとうございます!