【发布时间】:2017-05-29 11:50:51
【问题描述】:
我在 PHP 5.5.9 中使用 SQLite3
这是我正在使用的查询
SELECT ForignKey_A, Location_ID, TimeStamp
FROM Events
GROUP BY ForignKey_A
ORDER BY TimeStamp
我想在每组ForignKey_A 中TimeStamp 处于最小值和/或最大值的行上获得Location_ID(如果我能同时做到这两个,那就太好了)
我以为我会根据我对TimeStamp 的排序方式获得组中的第一个值,但它不起作用,每个组通常有 2 到 6 行
我不确定这个专栏是否对此有用,但是
我确实有名为 type 的列,布尔值为 1/0type will = 0 在每个 MIN(TimeStamp) 存在于每个 ForignKey_A 组中的行上。
同样,type 在每个 ForignKey_A 组中存在 MAX(TimeStamp) 的行上将 = 1。
编辑:
样品表:
╔═════════════╦═════════════╦════════════╦══════╗
║ 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 相同的行获取数据
这让我得到了我需要的东西,我必须进行几个子选择查询,但它有效,但有没有办法做这样的事情并获得正确的 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 ║
╚═════════════╩═══════╩════════════╩══════╩════════════╝
【问题讨论】:
-
请提供一些示例数据和您想要的输出。 (请参阅How to format SQL tables in a Stack Overflow post? 了解如何添加。)
-
已修复,我确实找到了一个可行的解决方案,但我必须在同一张表上执行两个查询并加入它们
标签: sqlite group-by max min related-content