0

うまくいけば、誰かが次のタスクで私を助けてくれることを願っています.hVEには2つのテーブル治療と「人」があります。Treatmentさまざまな人物の治療が開始された日付が含まれます。個人には姓などの個人情報が含まれます。

ここで、最初の治療と最後の治療の間の期間が 20 年を超えるすべての人を見つけなければなりません。テーブルは次のようになります。

Person
| PK_Person | First name | Name |
_________________________________
| 1 | A_Test | Karl |
| 2 | B_Test | Marie |
| 3 | C_Test | Steve |
| 4 | D_Test | Jack |

Treatment
| PK_Treatment | Description | Starting time | PK_Person |
_________________________________________________________
| 1 | A | 01.01.1989 | 1
| 2 | B | 02.11.2001 | 1
| 3 | A | 05.01.2004 | 1
| 4 | C | 01.09.2013 | 1
| 5 | B | 01.01.1999 | 2

したがって、この例では、出力は person Karl, A_Test.

問題が何であるかが理解でき、誰かが私を助けてくれることを願っています。

編集: 書式設定に問題があるようです。表が正しく表示されていません。読みやすいと思います。

4

3 に答える 3

0

少し異なるアプローチを取り、SQL Fiddle を使用して、以下のステートメントが機能することを確認しました。

前述のように、データは少し疑わしいようです。それでも、要件に従って、次のことができます。

select P.PK_Person, p.FirstName, p.Name
from person P
  inner join treatment T on T.pk_person = P.pk_person
where DATEDIFF((select x.startingtime from treatment x where x.pk_person = p.pk_person order by startingtime desc limit 1), T.StartingTime) > 7305

まず、処理テーブルに含まれていない人物を無視する処理を内部結合する必要があります。where部分は、基準 (この場合は日付の違い) に基づいて選択する必要があります。サブクエリを実行すると、人が最後に治療を受けた日付が生成され、それが各レコードと比較され、日数 (7305 = 20 年 * 365.25) でフィルター処理されます。

これが実際の SQL Fiddle サンプルです。

于 2013-06-07T13:53:15.943 に答える
0
SELECT *
FROM person p
INNER JOIN Treatment t on t.PK_Person = p.PK_Person 
WHERE DATEDIFF(year,[TREATMENT_DATE_1], [TREATMENT_DATE_2]) > 20

これでうまくいくはずですが、テストされていないため、スキーマを微調整する必要があります

于 2013-06-07T13:36:03.397 に答える
0

名が名のように見えないため、データは少し疑わしいように見えます。

ただし、やりたいことは、Treatment各人のテーブルを集計し、最小および最大の開始時間を取得することです。差が 20 年を超える場合は、個人を保持し、個人テーブルに再び参加して名前を取得します。

select p.FirstName, p.LastName
from Person p join
     (select pk_person, MIN(StartingTime) as minst, MAX(StartingTime) as maxst
      from Treatment t
      group by pk_person
      having MAX(StartingTime) - MIN(StartingTime) > 20*365.25
     ) t
     on p.pk_person = t.pk_person;

日付計算はデータベース間で異なることに注意してください。ほとんどのデータベースでは、2 つの日付の差を取ると、それらの間の日数がカウントされるため、これは非常に一般的なアプローチです (ただし、すべてのデータベースで機能するとは限りません)。

于 2013-06-07T13:36:04.943 に答える