Sql 筛选结果集以确定最小值
我有三张桌子,彼此相连 [PLAYLIST].DBI\u ID=1:1=[SUB\u FILES].SBF\u PLY\u ID=*:1=[STL].DBI\u ID 从这个数据库中,我可以获取一些数据:Sql 筛选结果集以确定最小值,sql,select,firebird,greatest-n-per-group,Sql,Select,Firebird,Greatest N Per Group,我有三张桌子,彼此相连 [PLAYLIST].DBI\u ID=1:1=[SUB\u FILES].SBF\u PLY\u ID=*:1=[STL].DBI\u ID 从这个数据库中,我可以获取一些数据: SELECT PLAYLIST.dbi_id as PLY_ID, SUB_FILES.dbi_id as SBF_ID, SUB_FILES.dbi_created_time as SBF_CREATED, STL.dbi_id as STL_ID FROM PLAYLIS
SELECT
PLAYLIST.dbi_id as PLY_ID,
SUB_FILES.dbi_id as SBF_ID,
SUB_FILES.dbi_created_time as SBF_CREATED,
STL.dbi_id as STL_ID
FROM PLAYLIST, SUB_FILES, STL
WHERE (PLAYLIST.ply_automation_id = 'F0117705'
OR PLAYLIST.ply_automation_id = 'F0117707')
AND (SUB_FILES.sbf_ply_id = PLAYLIST.dbi_id)
AND (SUB_FILES.sbf_stl_id = STL.dbi_id)
PLAYLIST.ply\u automation\u id=…
条件仅用于测试。最后,我将对整个播放列表表运行查询
我不知道如何只获取每个不同STL_ID值的SBF_创建日期最小的记录
换句话说,我只想获取PLY_ID的14.604(它具有STL_ID=5.596的两个记录中创建的最小SBF_)和14.747(它具有STL_ID=5.642的所有四个记录中创建的最小SBF_)的数据
所讨论的DB是Firebird 2.1,但如果可能的话,我对通用SQL答案感兴趣。根据您的描述,我假设您实际想要的结果是:
PLY_ID SBF_ID SBF_CREATED STL_ID
14.604 16044 2008-11-28 15:46:00.000 5.596
14.747 16.210 2008-12-11 11:30:00.000 5.642
因为这些是创建的SBF_最低的
您可以做的是在您加入的派生表中查找每个sbf\u stl\u id
的最低日期:
SELECT
PLAYLIST.dbi_id as PLY_ID,
SUB_FILES.dbi_id as SBF_ID,
SUB_FILES.dbi_created_time as SBF_CREATED,
STL.dbi_id as STL_ID
FROM PLAYLIST
JOIN SUB_FILES ON SUB_FILES.sbf_ply_id = PLAYLIST.dbi_id
JOIN STL ON SUB_FILES.sbf_stl_id = STL.dbi_id
JOIN
(
SELECT sbf_stl_id, MIN(dbi_created_time) AS min_dbi_created_time
FROM SUB_FILES
GROUP BY sbf_stl_id
) AS sub ON sub.sbf_stl_id = stl.dbi_id
AND sub.min_dbi_created_time = SUB_FILES.dbi_created_time
WHERE (PLAYLIST.ply_automation_id = 'F0117705' OR PLAYLIST.ply_automation_id = 'F0117707')
当我使用SQL Server进行测试时,这给出了期望的结果,但由于它没有使用任何特定于产品的特殊功能,而只是使用标准SQL,因此它应该可以与任何符合标准的数据库一起使用。Firebird?2.1的哪个版本,但如果可能,我对通用SQL答案感兴趣感谢您的更正,我已经更正了这个问题。