【发布时间】:2021-08-24 09:23:01
【问题描述】:
我有 5 个相关的表,我正在尝试从中生成查询 teport。
实现这一目标的过程是什么?
最终结果应该是:
| Last Calving_Date | Latest EC_Date | Latest BScore | Latest Group | Cow ID | 19-Jul-21 | 12-Jul-21 | 5-Jul-21 | 28-Jun-21 |
|---|---|---|---|---|---|---|---|---|
| 21/07/2021 | 15/12/2021 | 3 | RED | 18415 | 21 | 25 | 24 | 22 |
| 02/06/2021 | 11/11/2021 | 3.5 | RED | 18413 | 30 | 25 | 24 | 22 |
| 10/05/2021 | 15/10/2021 | 2.5 | YELLOW | 18419 | 27 | 25 | 26 | 21 |
至少有 1 个 Week1... Week4 列应该具有来自 Prod List 的值。 该表根据 Last Calving_Date 降序排序。
这些表格是:
Add_Cow_Event
| Calving_Date | Cow ID | Event Type | UID |
|---|---|---|---|
| 21/07/2021 | 18415 | Calved | 100000001 |
| 10/05/2021 | 18419 | Calved | 100000002 |
| 11/06/2020 | 18415 | Calved | 100000003 |
怀孕登记
| EC_DATE | Cow ID | UID |
|---|---|---|
| 15/12/2021 | 18415 | EC100000001 |
| 15/10/2021 | 18419 | EC100000002 |
| 11/06/2020 | 18415 | EC100000003 |
动物登记
| Cow ID | Status |
|---|---|
| 18415 | Active |
| 18419 | Active |
| 18413 | Active |
身体评分表
| Date | Cow ID | BScore | BS_UID |
|---|---|---|---|
| 21/07/2021 | 18415 | 3 | BS1023 |
| 10/05/2021 | 18419 | 2.5 | BS1024 |
| 11/06/2020 | 18415 | 3.5 | BS1025 |
Feed 组
| Date | Cow ID | Color | GC_UID |
|---|---|---|---|
| 21/07/2021 | 18415 | RED | GC103 |
| 10/05/2021 | 18419 | YELLOW | GC104 |
| 11/06/2020 | 18415 | BLUE | GC105 |
生产台
| Date | Cow ID | Shift | Production | |
|---|---|---|---|---|
| 19/07/2021 | 18415 | MORN | 5 | P103 |
| 19/07/2021 | 18415 | NOON | 5 | P104 |
| 19/07/2021 | 18415 | NIGHT | 5 | P105 |
| 19/07/2021 | 18419 | MORN | 10 | P106 |
| 19/07/2021 | 18419 | NOON | 11 | P107 |
| 19/07/2021 | 18419 | NIGHT | 6 | P108 |
| 12/07/2021 | 18415 | MORN | 8 | P109 |
| 12/07/2021 | 18415 | NOON | 12 | P110 |
| 12/07/2021 | 18415 | NIGHT | 3 | P111 |
我的第一步是尝试使用以下查询生成最新产犊日期表:
SELECT
Add_Cow_Event.Calving_Date,
Add_Cow_Event.Event Type,
Animal Register.Animal ID,
FROM Add_Cow_Event
LEFT JOIN Animal Register ON Add_Cow_Event.CowID = Animal Register.Animal ID
WHERE Add_Cow_Event.Event Type = 'Calved'
ORDER BY Add_Cow_Event.Calving_Date DESC
这会产生
| Calving_Date | Cow ID | Event Type |
|---|---|---|
| 21/07/2021 | 18415 | Calved |
| 10/05/2021 | 18419 | Calved |
| 11/06/2020 | 18415 | Calved |
接下来,我需要找到每个奶牛 ID 的最新产犊日期,并从表中删除较旧的记录。这是如何实现的?
【问题讨论】:
-
当涉及多个表时,限定all 列是一种很好的编程习惯。喜欢
Add_Cow_Event.Calving_Date而不仅仅是"Event Type。 -
提示:表别名为您节省了一些输入,并使代码更易于阅读!
...FROM Add_Cow_Event ace LEFT JOIN Animal_Register ar ON ace.CowID = ar.Animal ID....
标签: sql sql-server multiple-tables