2

SQLクエリについてサポートが必要です。多くのエントリを含む1つのテーブルがあり、最後の3列で同じ値を持つすべてのエントリをクエリしたいと思います。

私のテーブルは次のようになります。

|Refrigator|98C08A|2011-08-06 00:00:30|126|126
|Refrigator|B7BE29|2011-08-06 00:00:30|73|70
|Refrigator|599393|2011-08-06 00:00:30|126|126
|Refrigator|B7BE29|2011-08-06 00:00:29|73|70
|Refrigator|599393|2011-08-06 00:00:29|126|126
|Refrigator|599393|2011-08-06 00:00:29|126|126
|Refrigator|98C08A|2011-08-06 00:00:29|126|126
|Refrigator|98C08A|2011-08-06 00:00:29|126|126
|Refrigator|599393|2011-08-06 00:00:28|126|126

したがって、最後の3列でまったく同じ値を持つすべての行を取得したいので、結果は次のようになります。

|Refrigator|98C08A|2011-08-06 00:00:30|126|126
|Refrigator|599393|2011-08-06 00:00:30|126|126
|Refrigator|599393|2011-08-06 00:00:29|126|126
|Refrigator|599393|2011-08-06 00:00:29|126|126 (if possible without this duplicate)
|Refrigator|98C08A|2011-08-06 00:00:29|126|126
|Refrigator|98C08A|2011-08-06 00:00:29|126|126 (if possible without this duplicate)

誰かがこれを管理する方法を知っていますか?私がこれまでに試したことは次のとおりです。

SELECT * 
FROM smtab 
WHERE Datetime IN (
      SELECT Datetime 
      FROM smtab 
      GROUP BY Datetime 
      HAVING count(Datetime) >1) 
AND Power1 IN (
      SELECT Power1 
      FROM smtab 
      GROUP BY Power1 
      HAVING count(Power1) >1) 
AND Power8 IN (
      SELECT Power8 
      FROM smtab 
      GROUP BY Power8 
      HAVING count(Power8) >1) 
ORDER BY Datetime DESC;

しかし、私は働きませんでした!!!

誰かが私を助けてくれることを願っています!事前にt​​hx..。

4

4 に答える 4

1
SELECT DISTINCT *
FROM   smtab NATURAL JOIN (
  SELECT   Datetime, Power1, Power8
  FROM     smtab
  GROUP BY Datetime, Power1, Power8
  HAVING   COUNT(*) > 1
) AS t
于 2012-05-29T19:08:15.567 に答える
0

私はあなたが自己参加を探していると信じています。開始するには、このSOの回答をご覧ください。除外する列については言及されていないため、実際にはコードを提供できません。

于 2012-05-29T19:07:23.260 に答える
0

このアプローチは、SQLServerを使用する私のデータモデルで機能します。MySQLで動作するかどうかわからない。テーブルを派生クエリに結合しています。派生クエリは、1つを超えるレコードを持つすべてのレコードを検索します。

select * from Employees as e
 inner join
(
select LastName, firstname from Employees 
 group by LastName, FirstName having COUNT(1) > 1
) as derived
on e.LastName = derived.lastname and e.FirstName = derived.firstname
order by e.LastName

編集:データモデルとの関連性を高めるには、次のようにしてみてください。

SELECT * FROM smtab as s
  inner join 
(
  select datetime, power1, power8 
    from smtab as s2
   group by s2.datetime, power1, POWER8 having COUNT(1) > 1
) as derived
on s.datetime = derived.datetime and s.power1 = derived.power1 
and s.power8 = derived.power8
ORDER BY Datetime DESC;
于 2012-05-29T19:12:51.807 に答える
0

あなたの問題は、重複、内部結合を特定し、一致するものをすべて見つける必要があることです。

を使用distinctすると、各複製の 1 つだけを返すことができます。

-- only select one of each duplicate.
select distinct *
  from smtab as a
        -- Find the duplicates
  join ( select datetime, power1, power8
           from smtab
          group by datetime, power1, power8
         having count(*) > 1) as b
      -- join back on to the main table
    on a.datetime = b.datetime
   and a.power1 = b.power1
   and a.power8 = b.power8

それぞれ個別にではなく、3 つの列すべてで重複を探しています。したがって、重複を見つけるには、3 つすべてを同時にグループ化する必要があります。

于 2012-05-29T19:07:53.407 に答える