私は帯域幅使用率データのテーブルを持っています。各行には、ホスト名、NIC名、使用率、タイムスタンプがあります。各ホストの最大タイムスタンプでは、異なるNICカードが存在する可能性があります。 したがって、各ホストでは、最大タイムスタンプで異なるNICカードの平均%利用率が必要です。以下は結果セット行の平均
は、私のテーブル構造、挿入およびクエリです -
CREATE TABLE bandwith_utilization
(
id integer NOT NULL,
hostname character varying(255),
"timestamp" bigint,
niccardname character varying(255),
percentageutilization integer,
CONSTRAINT bandwidth_utilization_pkey PRIMARY KEY (id)
)
WITH (
OIDS=FALSE
);
ALTER TABLE bandwith_utilization
OWNER TO postgres;
INSERT INTO bandwith_utilization
VALUES (1,'host1','111111','nic1',40);
INSERT INTO bandwith_utilization
VALUES (2,'host1','111112','nic1',50);
INSERT INTO bandwith_utilization
VALUES (3,'host1','111113','nic1',50);
INSERT INTO bandwith_utilization
VALUES (4,'host1','111113','nic2',70);
INSERT INTO bandwith_utilization
VALUES (5,'host2','111111','nic1',80);
INSERT INTO bandwith_utilization
VALUES (6,'host2','111112','nic1',20);
INSERT INTO bandwith_utilization
VALUES (7,'host2','111112','nic2',30);
INSERT INTO bandwith_utilization
VALUES (8,'host3','111115','nic1',10);
だから、これは挿入した後、私のテーブルである -
id hostname timestamp niccardname percentageutilization
------------------------------------------------------------------
1; "host1"; 111111; "nic1"; 40
2; "host1"; 111112; "nic1"; 50
3; "host1"; 111113; "nic1"; 50
4; "host1"; 111113; "nic2"; 70
5; "host2"; 111111; "nic1"; 80
6; "host2"; 111112; "nic1"; 20
7; "host2"; 111112; "nic2"; 30
8; "host3"; 111115; "nic1"; 10
私は最大のタイムスタンプで、ホスト名のための私の出力を与えるクエリを持っています -
select hostname, timestamp, niccardname, percentageutilization
from report.bandwith_utilization
where timestamp = (select max(timestamp)
from report.bandwith_utilization nwUtil
where nwUtil.hostname = report.bandwith_utilization.hostname
) ;
上記クエリの出力は、 -
です。"host1"; 111113; "nic1"; 50
"host1"; 111113; "nic2"; 70
"host2"; 111112; "nic1"; 20
"host2"; 111112; "nic2"; 30
"host3"; 111115; "nic1"; 10
So Now My Expected putは、ホストごとに異なるNICカードの平均利用率です。すなわち
"host1"; 111113; "nic1"; 60
"host2"; 111112; "nic1"; 25
"host3"; 111115; "nic1"; 10
私が上記の同じクエリで最終平均出力を見つけるにはどうすればよいですか?今
select u.*
from (select u.*,
rank() over (partition by hostname order by timestamp desc) as seqnum
from report.bandwith_utilization u
) u
where seqnum = 1;
、あなたは何をあなたを得ることができます:
MySQLまたはPostgresqlを使用していますか? (含まれていない製品にはタグを付けないでください) – jarlh
私はMySQLタグを削除しました。これはPostgresのようです。 –