0

2つの日付フィールド(開始日と終了日)を使用して、テーブルからデータを選択しようとしています。where句の両方の日付フィールドで結果が返されない場合、startdateフィールドが削除されると結果が返されますが、何が起こっているのでしょうか。誰もがこのジレンマを手伝うことができますか

私のコードは次のとおりです。

   SELECT WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
     FROM WEBPROGRAMPARTICIPANTS WPP 
     JOIN WEBPERSONALINFO WPI ON WPP.USERID = WPI.USERID 
     JOIN WEBPROGRAMS WP ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE CONFIRMED = 1 
      AND WP.PROGRAMTYPE IN ('1') 
      AND WP.PROGRAMSTARTDATE >= '2009-01-02' 
      AND WP.PROGRAMENDDATE < '2009-09-15'
 GROUP BY WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
   HAVING COUNT(WPP.PROGRAMCODE) > 1 
 ORDER BY WPP.USERID,
          WPI.EMAIL

編集:

これが見るべき結果セットです

USERID PROGRAMSTARTDATE        PROGRAMENDDATE
------ ----------------------- -----------------------
26167  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26362  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26411  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000 
26491  2009-03-09 00:00:00.000 2009-06-12 00:00:00.000
4

4 に答える 4

3

DBにレコードがないため

CONFIRMED = 1 AND WP.PROGRAMTYPE IN ('1') WP.PROGRAMSTARTDATE >= '2009-01-02'??

編集:@David Andresが指摘したように、「COUNT(WPP.PROGRAMCODE) > 1」句は犯人の候補のように見えます。

于 2009-09-16T01:40:42.293 に答える
1

まあ、正直なところ、私には問題ないように見えます。結果をフィルタリングするhavingステートメント、またはwhereステートメントとhavingステートメントの組み合わせが疑われます。

于 2009-09-16T01:43:52.277 に答える
0

「その日付範囲中にゼロのユーザーが複数のプログラムに参加した」のように、あなたの答えはゼロのようです。

これを確認するためにできることは、クエリを少し変更して、各ユーザー参加したプログラムの数を表示することです。

   SELECT WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION,
          COUNT(WPP.PROGRAMCODE)
     FROM WEBPROGRAMPARTICIPANTS WPP 
     JOIN WEBPERSONALINFO WPI ON WPP.USERID = WPI.USERID 
     JOIN WEBPROGRAMS WP ON WPP.PROGRAMCODE = WP.PROGRAMCODE 
    WHERE CONFIRMED = 1 
      AND WP.PROGRAMTYPE IN ('1') 
      AND WP.PROGRAMSTARTDATE >= '2009-01-02' 
      AND WP.PROGRAMENDDATE < '2009-09-15'
 GROUP BY WPP.USERID, 
          WPI.EMAIL, 
          WPI.FIRSTNAME, 
          WPI.LASTNAME, 
          WPI.INSTITUTION 
 ORDER BY COUNT(WPP.PROGRAMCODE) DESC, 
          WPP.USERID,
          WPI.EMAIL

これにより、すべてのユーザーとその日付範囲のプロジェクトの数が、最初に数、次に最初に設定した基準の順にリストされます。それはあなたの痛みの原因であると思われるhaving節を取り除きます。

于 2009-09-16T02:05:04.500 に答える
0

紳士淑女の皆さん、本当にありがとうございました。あなたが言ったことすべてを分析し、さまざまな提案を試してみたところ、実際にコードが正しいことがわかりました。ただし、その期間中、ユーザーはその期間中に複数のプログラムに参加しませんでした。もう1年前に戻ると、期待されるデータが表示されます。つまり、基本的には、ユーザーがプログラムに論理的に参加するという単純な問題でした。

どうもありがとうございました。

于 2009-09-16T02:11:39.257 に答える