私の目標は、のtest_sname
値を持つ2つのレコードを選択するために、各PID
のために、ある値を持つ2行を選択し、同じentry_date
で発生し、「want2」「をしたいです」。私はtest_snames
の両方を含む最初の5 entry_dates
についてこれを行います。MySQLのクエリ - 2特定DISTINCT列が
これは、これを達成するための私のクエリです:
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)
予想通りENTRY_DATEがのtest_sname
含まれている2行のみがあるとき、それが機能するか「want2」「はをしたいです」。 (正しい)クエリの
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
例えば、のtest_sname
同じに 'をしたい' から複数の行がある場合、問題が来ますentry_date。having 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
、私は(私は自分自身で問題を解決しないであろうということを知っている)サブクエリでlimit 2
を入れてみましたが、それはこのエラーを与えた、と私は私がほとんどを持っていたと思いましたSQLの更新されたバージョンので、私はサブクエリでlimit
を使用することはできません。
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
私はこの問題を解決するために、複数の方法があります実現 - 私はすべての値を選択して、プログラムはPythonで私が必要なものを取ることができるが、私は、Pythonを使って書かれたMySQLのクエリ・ソリューションを探していますmySQLコネクタ。私はしかし、Pythonのソリューションについては不平を言うことはありません。
私は、MySQL-コネクタv2.1.3およびMySQLサーバーv5.7.11とのお時間を
おかげでPythonのv3.4.4を使用しています!