0

最初の「users_counts」という2つのテーブルがあります

 id         int(11) AUTO_INCREMENT
 name       varchar(250)

そして、2番目のテーブル「counts_data」があります

 id       int(11) AUTO_INCREMENT
 id_user  int(11) 
 count    int(11) 
 date     datetime

最初のテーブルからすべてのレコードを選択し、2 番目のテーブルからいくつかのデータを取得してから、それらをマージしたいと考えています。2番目のテーブルで日付順で最後のカウントを収集する一時(1つのリクエスト用)列を作成し、2番目のテーブルで日付順で最後から2番目のカウントを収集する2番目の列を作成します。

INSERT INTO `users_counts` (`id`,`name`) VALUES ('1','John');
INSERT INTO `users_counts` (`id`,`name`) VALUES ('2','Michael');
INSERT INTO `users_counts` (`id`,`name`) VALUES ('3','Den');

INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('1','1', '200', '2012.09.09');
INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('2','1', '212', '2012.09.01');
INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('3','2', '20', '2012.01.09');
INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('4','3', '210', '2012.02.09');
INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('5','3', '2033', '2012.03.09');
INSERT INTO `counts_data` (`id`,`id_user`, `count`, `date`) VALUES ('6','3', '1', '2012.04.09');

最後に、リクエストの後、このようなものを取得したい

id  name      count  count_before
1   John      200    212
2   Michael   20     0
3   Den       1      2033

感謝。

4

2 に答える 2

1

これを行う別の方法:

select uc.id,
       uc.name,
       (select count 
          from counts_data cd 
          where cd.id_user = uc.id
          order by date desc limit 1) as count,
       ifnull((select count 
                 from counts_data cd 
                 where cd.id_user = uc.id 
                 order by date desc limit 1 offset 1),0) as count_before
from users_counts uc;

行/レコードごとに counts_data から 1 つの値しか必要ないため、mySQL でインライン クエリを使用できます。

SQL フィドル

于 2013-02-19T15:19:12.543 に答える
0
select  uc.id
,       uc.name
,       cd1.count
,       cd3.count as count_before
from    users_counts uc
left join
        counts_data cd1
on      cd1.id_user = uc.id
        and cd.date = 
        (
        select  max(date)
        from    counts_data cd2
        where   cd2.id_user = uc.id_user
        )
left join
        counts_data cd3
on      cd3.id_user = uc.id
        and cd.date = 
        (
        select  max(date)
        from    counts_data cd4
        where   cd4.id_user = uc.id_user
                and cd4.date <> cd1.date
        )
于 2013-02-19T15:11:26.187 に答える