0

次のフィールドとサンプルデータを含むテーブルがあります。

user_id     meta_key           meta_value
-------     --------           ----------
'69'        'usertemplate'     'template1'
'69'        'userstartdate'    '07/26/2012 02:01:37 PM'
'69'        'userenddate'      '07/26/2013 02:01:37 PM'
'70'        'usertemplate'     'template1'
'70'        'userstartdate'    '07/26/2013 02:01:37 PM'
'70'        'userenddate'      '07/26/2014 02:01:37 PM'
'71'        'usertemplate'     'template2'
'71'        'userstartdate'    '07/26/2012 02:01:37 PM'
'71'        'userenddate'      '07/26/2013 02:01:37 PM'
'72'        'usertemplate'     'template2'
'72'        'userstartdate'    '07/26/2011 02:01:37 PM'
'72'        'userenddate'      '07/26/2012 02:01:37 PM'
'73'        'usertemplate'     'template2'
'73'        'userstartdate'    '07/25/2011 02:01:37 PM'
'73'        'userenddate'      '07/25/2012 02:01:37 PM'

私の目標は、**user_id** のリストを取得することです (たとえば):

ユーザーテンプレート = テンプレート 2

ユーザー開始日 > 2011 年 7 月 20 日 02:01:37 PM

ユーザー開始日 < 2011/07/30 02:01:37 PM

このクエリをどのように記述しますか?

編集:これは私がこれまでに試したことです:

SELECT user_id 
FROM myTable t 
  INNER JOIN myTable s 
    ON t.user_id = s.user_id 
      AND s.meta_key = 'userstartdate' 
      AND CAST(s.meta_value AS DATE) > '07/20/2011 02:01:37 PM' 
  INNER JOIN myTable e 
    ON t.user_id = e.user_id 
      AND e.meta_key = 'userenddate' 
      AND CAST(e.meta_value AS DATE) < '07/30/2011 02:01:37 PM' 
WHERE t.meta_key = 'usertemplate' 
  AND t.meta_value = 'template2'
4

2 に答える 2

1

これは、いくつかの自己結合で行うことができます。

SELECT user_id
FROM myTable t
INNER JOIN myTable s ON t.user_id = s.user_id 
    AND s.meta_key = 'userstartdate' 
    AND CAST(s.meta_value AS DATE) > '07/20/2011 02:01:37 PM'
INNER JOIN myTable e ON t.user_id = e.user_id 
    AND e.meta_key = 'userenddate' 
    AND CAST(e.meta_value AS DATE) < '07/30/2011 02:01:37 PM'
WHERE t.meta_key = 'usertemplate' AND t.meta_value = 'template2'

日付データ型への変換と比較の正確な構文は、演習として残します。:)

于 2013-03-13T19:53:53.857 に答える
0

これはうまくいくはずです:

SELECT DISTINCT T.user_id
 FROM tbl T
 INNER JOIN tbl T1
         on T.user_id = T1.user_id 
         AND T1.meta_key = 'usertemplate'
         AND T1.meta_value = 'template2'
 INNER JOIN tbl T2
         on T.user_id = T2.user_id 
         AND T2.meta_key = 'userstartdate'
         AND T2.meta_value > '07/20/2011 02:01:37 PM'   
         AND T2.meta_value < '07/30/2011 02:01:37 PM'
于 2013-03-13T19:55:12.920 に答える