IT業界のすみっこ暮らし

ふと気がついたときの記録



SQL学習サイト SQL ZOO

SQL ZOO

SQLZOO

DBで直接実行しながら学習できるサイト f:id:papamau:20170222131502p:plain

DBは「MySQL」と「SQL Server」の2種類が選択可能

f:id:papamau:20170222131635p:plain

学習画面

f:id:papamau:20170222131718p:plain

クイズ画面

f:id:papamau:20170222132007p:plain

該当メニューの進み具合がメニューの横の黒いバーに表示される

(会員登録なし、ブラウザの情報を保存)

f:id:papamau:20170222132256p:plain

まとめ

wikiに登録されているテーブルの値と実際SQL実行時の結果と若干異なる場合もあるけど、実際にDBを構築せずに学習できるのは便利だと思った。

Entity Framework:最新の日付のレコードを抽出

DBサンプル

tb1

Id DetailId LastUpdatedAt
1 101 2017-02-01 01:00:00
2 101 2017-02-01 10:00:00
3 101 2017-02-02 01:00:00
4 102 2017-02-01 01:00:00
5 102 2017-02-02 01:00:00

tb2

DetailId Name
101 Name1
102 Name2

例1

tb1から同じDetailIdを持つ複数のレコードの中で、一番最新の日付のものを抽出する

var list = (from t in db.tb1
           group t by t.DetailId into g
           select g.OrderByDescending(e => e.LastUpdatedAt).FirstOrDefault() into p
           select new 
           {
               Id = p.Id,
               DetailId = p.DetailId,
               LastUpdatedAt = p.LastUpdatedAt
           }).ToList();

例2

tb1から同じDetailIdを持つ複数のレコードの中で、一番最新の日付のもの、且つステータスが10であるもので、tb2と紐付いてるNameも抽出する

var list = (from t in db.tb1
            group t by t.OrderDetailId into g
            select g.OrderByDescending(e => e.LastUpdatedAt).FirstOrDefault() into p
            join tt in db.tb2 on p.DetailId equals tt.DetailId
            where 
                p.Status == 10
           select new 
           {
               Id = p.Id,
               DetailId = p.DetailId,
               Name = tt.Name,
               LastUpdatedAt = p.LastUpdatedAt
           }).ToList();

参考サイト

stackoverflow.com

stackoverflow.com





プライバシーポリシー