SQLite 如何使用 group by 获取值与最大值相关的行

SQLite How to get row where value is related to max with group by

我在 PHP 5.5.9
中使用 SQLite3 这是我正在使用的查询

SELECT ForignKey_A, Location_ID, TimeStamp
FROM Events
GROUP BY ForignKey_A
ORDER BY TimeStamp

我想在 TimeStamp 所在的行上获得 Location_ID 每组 ForignKey_A 中的最小值 and/or 最大值(如果我可以在曾经很棒)

我以为我会根据我的排序方式获得组中的第一个值 TimeStamp 但它不起作用,每个组通常有 2 到 6 行

我不确定此专栏是否对此有用,但是
我确实有名为 type 的列,布尔值为 1/0
type 将在每个 ForignKey_A 组中存在 MIN(TimeStamp) 的行上 = 0。
同样,type 将在每个 ForignKey_A 组中存在 MAX(TimeStamp) 的行上 = 1。


编辑:
示例 Table:

╔═════════════╦═════════════╦════════════╦══════╗
║ ForignKey_A ║ Location_ID ║ TimeStamp  ║ Type ║
╠═════════════╬═════════════╬════════════╬══════╣
║           1 ║         762 ║ 1496062971 ║    0 ║
║           1 ║         427 ║ 1496063971 ║    1 ║
║           1 ║         417 ║ 1496065971 ║    0 ║
║           1 ║         123 ║ 1496072971 ║    1 ║
║           2 ║         594 ║ 1496062971 ║    0 ║
║           2 ║         427 ║ 1496072971 ║    1 ║
║           3 ║         217 ║ 1496082971 ║    0 ║
║           3 ║         356 ║ 1496092971 ║    1 ║
║           3 ║         985 ║ 1496099971 ║    0 ║
║           3 ║         789 ║ 1496162971 ║    1 ║
║           3 ║         456 ║ 1496262971 ║    0 ║
║           3 ║         123 ║ 1496362971 ║    1 ║
╚═════════════╩═════════════╩════════════╩══════╝

我确实弄清楚如果我这样做我会得到相关的 Location_ID

SELECT MIN(TimeStamp), Location_ID
FROM TableA
GROUP BY ForignKey_A

我可以从与 MIN/MAX TimeStamp 相同的行中获取数据 这让我得到了我需要的东西,我必须进行几个子 select 查询,但它有效,但是有没有办法做这样的事情并获得正确的 Location_ID?

SELECT MIN(TimeStamp) AS 'Begin', Location_ID AS 'Location_ID @ MIN TimeStamp',
    MAX(TimeStamp) AS 'End', Location_ID AS 'Location_ID @ MAX TimeStamp', 
    ForignKey_A
FROM TableA
GROUP BY ForignKey_A

那会做出这样的东西

╔═════════════╦═══════╦════════════╦══════╦════════════╗
║ ForignKey_A ║ Start ║   Begin    ║ Stop ║    End     ║
╠═════════════╬═══════╬════════════╬══════╬════════════╣
║           1 ║   762 ║ 1496062971 ║  123 ║ 1496072971 ║
║           2 ║   594 ║ 1496062971 ║  427 ║ 1496072971 ║
║           3 ║   217 ║ 1496082971 ║  123 ║ 1496362971 ║
╚═════════════╩═══════╩════════════╩══════╩════════════╝

对于单个查询,无法将列值与 MIN()/MAX() 相关联。 您必须使用子查询查找最小值和最大值,然后将这些值连接在一起:

SELECT ForeignKey_A,
       b.TimeStamp,
       b.Location_ID,
       e.TimeStamp,
       e.Location_ID
FROM (SELECT ForeignKey_A,
             min(TimeStamp) AS TimeStamp,
             Location_ID
      FROM TableA
      GROUP BY ForeignKey_A
     ) AS b
JOIN (SELECT ForeignKey_A,
             max(TimeStamp) AS TimeStamp,
             Location_ID
      FROM TableA
      GROUP BY ForeignKey_A
     ) AS e
USING (ForeignKey_A);