Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 筛选结果集以确定最小值_Sql_Select_Firebird_Greatest N Per Group - Fatal编程技术网

Sql 筛选结果集以确定最小值

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

我有三张桌子,彼此相连

[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 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答案感兴趣感谢您的更正,我已经更正了这个问题。