完成了工作,但我觉得我违反了编程规则。
function extractMiddle(str) {
var position;
var length;
if(str.length % 2 == 1) {
position = str.length / 2;
length = 1;
} else {
position = str.length / 2 - 1;
length = 2;
}
return str.substring(position, position + length)
}
console.log(extractMiddle("handbananna"));
有没有更好的方法或正确的方法来完成这项工作?
答案 0 :(得分:1)
一种选择是为每个reg_date
组找到最大server
,其中server
可以从UNION
查询中的5个值中选择一个,然后选择表格中每个server
组的完整记录。
SELECT t1.*
FROM serverTable t1
INNER JOIN
(
SELECT server,
MAX(reg_date) AS reg_date
FROM serverTable
WHERE server in ('proc1@server1', 'proc2@server1', 'proc3@server1', 'proc4@server1', 'proc5@server1')
GROUP BY server
) t2
ON t1.server = t2.server AND
t1.reg_date = t2.reg_date
答案 1 :(得分:0)
使用UNION ALL
而不是UNION
。通过使用UNION
,数据库不必要地查找不存在的重复项。所有UNIONed查询都包含一个WHERE
子句,如“server like(some unique value)”。 server
不能等于其中一个以上,因此您不会有任何重复过滤。
另外,请使用=
代替like
。当你想要进行通配符搜索时,会使用LIKE
。
答案 2 :(得分:0)
这样的事情应该这样做:
select
serverTable.col1,
serverTable.col2,
serverTable.col3,
max(reg_date)
from
serverTable
where
server in ('proc1@server1','proc2@server1','proc3@server1','proc4@server1','proc5@server1')
group by
serverTable.col1,
serverTable.col2,
serverTable.col3
order by
server, reg_date;