Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
グループ単位で、ある値の存在有無を判別し、重複しないIDを取得したい。
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30227#CommentId82737
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2017/2/17 17:57:36
> 直近から2回分のみ取得したいです。
『直近』の定義は何ですか?
登録されている日付を、ID ごとの降順で上位 2 件拾えばよいのか、
それとも、特定の日付より前(または後)という条件が付くのか…。
> 結果をBテーブルにInsertしたいと思います。
たとえばこんな感じ。細かいところは適宜調整して下さい。
CTE 式(WITH ブロック)の代わりに、副問い合わせを使っても良いかな。
【B テーブルを新規作成】
WITH
[ID_LIST] AS (SELECT DISTINCT [ID] FROM [Aテーブル]),
[DT_LIST] AS (
SELECT
[ID]
, [実施日]
, [行番号] = ROW_NUMBER() OVER (PARTITION BY [ID] ORDER BY [実施日])
FROM [Aテーブル]
WHERE [業務内容] = N'訪問'
)
SELECT
[ID_LIST].[ID]
, MAX(CASE [行番号] WHEN 1 THEN [実施日] END) AS [実施日1]
, MAX(CASE [行番号] WHEN 2 THEN [実施日] END) AS [実施日2]
INTO
[Bテーブル]
FROM
[ID_LIST] LEFT JOIN [DT_LIST]
ON [ID_LIST].[ID] = [DT_LIST].[ID]
AND [DT_LIST].[行番号] <= 2
GROUP BY
[ID_LIST].[ID]
【既存の B テーブルに追加】
WITH
[ID_LIST] AS (SELECT DISTINCT [ID] FROM [Aテーブル]),
[DT_LIST] AS (
SELECT
[ID]
, [実施日]
, [行番号] = ROW_NUMBER() OVER (PARTITION BY [ID] ORDER BY [実施日])
FROM [Aテーブル]
WHERE [業務内容] = N'訪問'
)
INSERT INTO [Bテーブル] ([ID], [実施日1], [実施日2])
SELECT
[ID_LIST].[ID]
, MAX(CASE [行番号] WHEN 1 THEN [実施日] END)
, MAX(CASE [行番号] WHEN 2 THEN [実施日] END)
FROM
[ID_LIST] LEFT JOIN [DT_LIST]
ON [ID_LIST].[ID] = [DT_LIST].[ID]
AND [DT_LIST].[行番号] <= 2
GROUP BY
[ID_LIST].[ID]