加入两个单独的 SQL 语句或将计数插入查询
Joining two seperate SQL Statement or inserting count into query
早上好,我无法理解将以下两个查询连接在一起的最佳方式。
第一个代码按名称显示最后一个条目,我想要每次列出名称的次数。在第二个查询中,它正确地计算了名称,但我似乎无法弄清楚如何将计数添加到相同的结果中。
提前致谢
SELECT `TimeStamp` as TimeStamp,`Name`, `Status` ,`Station`,`Role`,`Line`
FROM trs_contact u1
WHERE u1.`TimeStamp` = (SELECT MAX(`TimeStamp`)
FROM trs_contact u2
WHERE u1.`Name` = u2.`Name`
)
SELECT `Name`, COUNT(*)
FROM `trs_contact`
GROUP BY `Name`
这个查询:
SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter
FROM trs_contact
GROUP BY Name
returns 最后一个条目和名称在 table 中出现的次数。
加入 table:
SELECT u1.TimeStamp, u1.Name, u1.Status, u1.Station, u1.Role, u1.Line, u2.counter
FROM trs_contact u1
INNER JOIN (
SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter
FROM trs_contact
GROUP BY Name
) u2 ON u2.Name = u1.Name AND u2.TimeStamp = u1.TimeStamp
如果您的 MySql 版本是 8.0+,您可以使用 ROW_NUMBER()
和 COUNT()
window 函数
SELECT TimeStamp, Name, Status, Station, Role, Line, counter
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION NY Name ORDER BY TimeStamp DESC) rn,
COUNT(*) OVER (PARTITION NY Name) counter
FROM trs_contact
) t
WHERE rn = 1
早上好,我无法理解将以下两个查询连接在一起的最佳方式。
第一个代码按名称显示最后一个条目,我想要每次列出名称的次数。在第二个查询中,它正确地计算了名称,但我似乎无法弄清楚如何将计数添加到相同的结果中。
提前致谢
SELECT `TimeStamp` as TimeStamp,`Name`, `Status` ,`Station`,`Role`,`Line`
FROM trs_contact u1
WHERE u1.`TimeStamp` = (SELECT MAX(`TimeStamp`)
FROM trs_contact u2
WHERE u1.`Name` = u2.`Name`
)
SELECT `Name`, COUNT(*)
FROM `trs_contact`
GROUP BY `Name`
这个查询:
SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter
FROM trs_contact
GROUP BY Name
returns 最后一个条目和名称在 table 中出现的次数。
加入 table:
SELECT u1.TimeStamp, u1.Name, u1.Status, u1.Station, u1.Role, u1.Line, u2.counter
FROM trs_contact u1
INNER JOIN (
SELECT Name, MAX(TimeStamp) TimeStamp, COUNT(*) counter
FROM trs_contact
GROUP BY Name
) u2 ON u2.Name = u1.Name AND u2.TimeStamp = u1.TimeStamp
如果您的 MySql 版本是 8.0+,您可以使用 ROW_NUMBER()
和 COUNT()
window 函数
SELECT TimeStamp, Name, Status, Station, Role, Line, counter
FROM (
SELECT *, ROW_NUMBER() OVER (PARTITION NY Name ORDER BY TimeStamp DESC) rn,
COUNT(*) OVER (PARTITION NY Name) counter
FROM trs_contact
) t
WHERE rn = 1