【发布时间】:2016-11-08 21:12:58
【问题描述】:
我正在研究一组数据,以便从 Oracle 数据库生成报告。
数据在两个表中:
- 供应
- 设备
只有一列链接两个表:
- SUPPLY.DEVICE_ID
- DEVICE.ID
在 SUPPLY 中,有这些数据:(Markdown 效果不佳。它应该显示一个表格)
| DEVICE_ID | COLOR_TYPE | SERIAL | UNINSTALL_DATE |
|----------- |------------ |-------------- |--------------------- |
| 1232 | 1 | CAP857496 | 08/11/2016,19:10:50 |
| 5263 | 2 | CAP57421 | 07/11/2016,11:20:00 |
| 758 | 3 | CBO753421869 | 07/11/2016,04:25:00 |
| 758 | 4 | CC9876543 | 06/11/2016,11:40:00 |
| 8575 | 4 | CVF75421 | 05/11/2016,23:59:00 |
| 758 | 4 | CAP67543 | 30/09/2016,11:00:00 |
在 DEVICE 中,我必须选择所有列(或多或少),但每一行都是唯一的。
我需要实现的是: 对于每个 SUPPLY.DEVICE_ID 和 SUPPLY.COLOR_TYPE,我需要最近的 ROW -> MAX(UNINSTALL_DATE)
加入 或多或少是 DEVICE 中的所有列。
最后我应该有这样的东西:
| ACCOUNT_CODE | MODEL | DEVICE.SERIAL | DEVICE_ID | COLOR_TYPE | SUPPLY.SERIAL | UNINSTALL_DATE |
|-------------- |------- |--------------- |----------- |------------ |--------------- |--------------------- |
| BUSTO | MS410 | LM753 | 1232 | 1 | CAP857496 | 08/11/2016,19:10:50 |
| MACCHI | MX310 | XC876 | 5263 | 2 | CAP57421 | 07/11/2016,11:20:00 |
| ASL_COMO | MX711 | AB123 | 758 | 3 | CBO753421869 | 07/11/2016,04:25:00 |
| ASL_COMO | MX711 | AB123 | 758 | 4 | CC9876543 | 06/11/2016,11:40:00 |
| ASL_VARESE | X950 | DE8745 | 8575 | 4 | CVF75421 | 05/11/2016,23:59:00 |
到目前为止,使用嵌套选择如下:
SELECT DEVICE_ID,COLOR_TYPE,SERIAL,UNINSTALL_DATE FROM
(SELECT SELECT DEVICE_ID,COLOR_TYPE,SERIAL,UNINSTALL_DATE
FROM SUPPLY WHERE DEVICE_ID = '123456' ORDER BY UNINSTALL_DATE DESC)
WHERE ROWNUM <= 1
在尝试 MAX(UNISTALL_DATE) or HIGHEST(UNISTALL_DATE) 之后,我设法在 UNISTALL_DATE 列上获得了最高值。
我也试过了:
SELECT SUPPLY.DEVICE_ID, SUPPLY.COLOR_TYPE, ....
FROM SUPPLY,DEVICE WHERE SUPPLY.DEVICE_ID = DEVICE.ID
它有效,但给了我所有的项目,基本上它是两个表的合并。 当我尝试缩小所选数据的范围时,我得到错误或空结果。
我开始怀疑无法获取这些数据,我开始将数据导出到 excel 中并从那里开始工作,但我希望在放弃之前有人可以帮助我...
提前谢谢你。
【问题讨论】:
标签: oracle select join nested max