1

table1ユーザー名を含み、ユーザーが何かをしたtable2日付を含む2つのテーブルがあります。x

 table1:               table2:        

|----------|          |-------|----------|
| username |          | User  | date     |
|----------|          |-------|----------|
| user1    |          | user1 | 1.1.2013 |
| user2    |          | user2 | 2.4.2013 |
| user3    |          |-------|----------|
|----------|     

今、私はすべてのユーザーを表示するリストを取得したいと考えていtable1ますtable2.

|-------|----------|
| User1 | 1.1.2013 |
| user2 | -        |
| user3 | -        |
| user1 | -        |
| user2 | 2.3.2013 |
| user3 | -        |
|-------|----------|

したがって、基本的に、table2 から行を読み取るときに、他のユーザーがこの同じ日に何かをしたことを知りたいだけです。

これをどのように行うことができるかについてのアイデアがあれば、私を助けてください:)


次に追加する必要があるのは月です:)そして、たとえば、リストに年ごとの月があるようにする必要があります

| | MM/YYYY | ユーザー | キロ |
|---------|--------|-----|
| | 2013 年 1 月 | ユーザー1 | 0 |
| | 2013 年 1 月 | ユーザー2 | 0 |
| | 2013 年 1 月 | ユーザー3 | 5 |
| | 2013 年 2 月 | ユーザー1 | 2 |
| | 2013 年 2 月 | ユーザー2 | 4 |
| | 2013 年 2 月 | ユーザー3 | 7 |
| | ... | ... | ... |
| | 2013 年 12 月 | ユーザー1 | 0 |
| | 2013 年 12 月 | ユーザー2 | 1 |
| | 2013 年 12 月 | ユーザー3 | 0 |
|---------|--------|-----|

このテーブルには、最新の更新されたクエリに何らかの if ステートメントが必要だと思います。そして、私はこれをすぐに解決できないと思うので、共有する解決策があれば気にしません:)

だから私はチェックする必要があります、誰かが1月に魚を手に入れましたか、そうでない場合=>マーク0 数匹の魚を手に入れた場合、数匹の魚を手に入れたユーザーにその月の平均または合計をマークします。前と同じ考え方ですが、これにより、すべての測定点が同じ垂直線にあるため、より適切な折れ線グラフの「セグメント」が可能になります。

4

4 に答える 4

0
|-------|----------|
| User1 | 1.1.2013 |
| user2 | -        |
| user3 | -        |<-- we need some way of distinguishing between this row...
| user1 | -        |
| user2 | 2.3.2013 |
| user3 | -        |<-- and this row
|-------|----------|

それで

SELECT DISTINCT x.*
              , y.date
              , CASE WHEN z.date IS NULL THEN 0 ELSE 1 END catch 
           FROM table1 x 
           JOIN table2 y 
           LEFT 
           JOIN table2 z 
             ON z.user = x.username 
            AND z.date = y.date
          ORDER
             BY x.username
              , y.date;

sqlfiddle.com/#!2/81494/6

(そして、明らかに、これが適切に機能するためには、日付データ型を使用して日付を保存する必要があります)

于 2013-11-06T16:51:24.637 に答える
0

私はこの仕事が好きでした。これが最適な解決策だとは思わないでください。

SELECT un, tmp 
FROM (
    SELECT * 
    FROM (
        SELECT  t1.username as un, 
            t2.user as u, 
            t2.date as d, 
            t2.date as tmp
        FROM table1 as t1, table2 as t2 
        WHERE t1.username = t2.user
        UNION
        SELECT  
            t1.username as un, 
            t2.user as u, 
            t2.date as d, 
            '-' as tmp
        FROM table1 as t1, table2 as t2 
        WHERE t1.username <> t2.user
    ) AS res
    ORDER BY d ASC
) AS tot_res

更新しました:

SELECT un, tmp 
FROM (
    SELECT * 
    FROM (
        SELECT  t1.username as un, 
            t2.user as u, 
            t2.date as d, 
            t2.date as tmp
        FROM table1 as t1, table2 as t2 
        WHERE t1.username = t2.user
        UNION
        SELECT  
            t1.username as un, 
            t2.user as u, 
            t2.date as d, 
            '-' as tmp
        FROM table1 as t1, table2 as t2 
        WHERE t1.username <> t2.user    
    ) AS res
    GROUP BY res.un, res.d
    ORDER BY d ASC
) AS tot_res
于 2013-11-05T00:45:02.497 に答える