0

編集:これがpostgres 8.3実装になる前に言及しないで申し訳ありません。

今日作成された 4 つの列のテーブルがあります。

Source_IP, Destination_IP, user_type, ut_bool

列はuser_type継続的に新しいエントリを取得するため、それを過去のエントリの表と比較して、問題の日が新しいかどうかを確認したいと思います。はsource_ipdestination_Ip主キーと見なすことができます

10.1.1.2, 30.30.30.1, type1, 0
10.1.1.2, 30.30.30.1, type4, 1
10.1.1.2, 30.30.30.4, type5, 0
10.1.1.2, 30.30.30.4, type3, 0
10.1.1.2, 30.30.50.9, type2, 0
10.1.1.4, 30.30.30.4, type4, 0
10.1.1.4, 30.30.30.4, type3, 1

source_ip, destination_ip少なくとも 1 つのペアの隣に 1 がある場合、( ) ペアの特定のグループの列に 1 を返すのに問題があるsource_ip,destination_ip, user_typeため、たとえば取得したい

10.1.1.2, 30.30.30.1, 1
10.1.1.2, 30.30.30.4, 0
10.1.1.4, 30.30.30.4, 1

exists ステートメントを正しく使用する方法がわかりません。

次のクエリを修正するにはどうすればよいですか?

select source_ip, destination_ip,
(
select
case when exists 
(select true from table
where ut_bool =1)
then '1'
else '0' end
) as ut_new
from
table;

exists ステートメントを正しく使用していないため、クエリが返され続けます。

10.1.1.2, 30.30.30.1, 0
10.1.1.2, 30.30.30.4, 0
10.1.1.4, 30.30.30.4, 0
4

2 に答える 2

3

SQLステートメントを変更することをお勧めします。

SELECT SOURCE_IP,
  DESTINATION_IP,
  CASE SUM(UT_BOOL)
    WHEN 0
    THEN 0
    ELSE 1
  END AS UT_NEW
FROM test_table_name
GROUP BY SOURCE_IP,
  DESTINATION_IP;

テストデータに対して実行すると、次の結果が返されます。

10.1.1.2    30.30.50.9  0
10.1.1.2    30.30.30.1  1
10.1.1.2    30.30.30.4  0
10.1.1.4    30.30.30.4  1

OracleとPostgresでテストおよび作業中

于 2012-12-05T08:27:59.240 に答える
2
SELECT Source_IP, Destination_IP
    , MAX(ut_bool) As the_value
FROM ztable
GROUP BY Source_IP, Destination_IP
    ;
于 2012-12-08T00:00:09.897 に答える