このディレクトリの索引

% 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #365 # ・DB名:Firebird1.03 # ・テーブル #  ■メイン #   受注番号 受注日 注文社 #   11    2011/12/20 A社 #   12    2011/12/21 B社 #  ■サブ #   連番 受注番号 商品コード 数 #   50  11    A10    100 #   51  11    C30    20 #   52  12    A10    10 #  ■商品 #   商品コード 商品名 カテゴリ 納品番号(商品ごとで重複していません) #   A10     コート 洋服   100 #   C30     帯   和服   504 # # メインの受注番号とサブの受注番号、サブの商品コードと商品の商品コードで # リンクしています。 # # 欲しい結果 # 受注日の期間(いつからいつまで)と、商品のカテゴリと納品番号で、 # 受注の全内容(商品)が知りたいです。 # 受注日:2011/12/01から12/31まで # カテゴリ:洋服 納品番号:100で検索をして # # 受注番号 受注日 注文者 商品コード 商品名 数量 # 11    2011/12/20 A社 A10    コート 100 # 11    2011/12/20 A社 C30    帯   20----★ # 12    2011/12/21 B社 A10    コート 10 # ★受注の全内容が知りたいので、該当する受注番号のサブはすべて表示 # したい。メインの内容は重複表示となります。 # # 丸投げですみませんが、どなたかSQL文をお願いできませんでしょうか。 # テーブルが3つになるとどうしてよいものかわからないです。 # よろしくお願いします。 # # # メイン(11,2011/12/20,'A社'). メイン(12,2011/12/21,'B社'). サブ(50,11,'A10',100). サブ(51,11,'C30',20). サブ(52,12,'A10',10). 商品('A10',コート,洋服,100). 商品('C30',帯,和服,504). '受注日の期間(いつからいつまで)と、商品の商品カテゴリと納品番号で、受注の全内容(商品)が知りたい'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号) :- '受注番号候補を得て、それを鍵に、データベースから選択する'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,LL1), 受注番号順に表示する(LL1). '受注番号候補を得て、それを鍵に、データベースから選択する'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,LL1) :- 受注番号候補を得る(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号ならび), 'それを鍵に、データベースから選択する'(_受注番号ならび,LL1). 受注番号候補を得る(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号ならび) :- setof(_受注番号, [_受注番号,_受注日,_注文社,_受注日,_受注日下限,_受注日上限,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号] ^ ( '受注日範囲のメインの受注番号からサブ・商品を結合可能な受注番号'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号)),_受注番号ならび). '受注日範囲のメインの受注番号からサブ・商品を結合可能な受注番号'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号) :- 受注日範囲のメインの受注番号から(_受注日下限,_受注日上限,_受注番号,_受注日,_注文社), 'サブ・商品を結合可能な受注番号'(_受注番号,_受注日,_注文社,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号). 受注日範囲のメインの受注番号から(_受注日下限,_受注日上限,_受注番号,_受注日,_注文社) :- メイン(_受注番号,_受注日,_注文社), _受注日 @>= _受注日下限, _受注日 @=< _受注日上限. 'サブ・商品を結合可能な受注番号'(_受注番号,_受注日,_注文社,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号) :- サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_商品カテゴリ,_納品番号). 'それを鍵に、データベースから選択する'(_受注番号ならび,LL1) :- findall([_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量],( append(_,[_受注番号|_],_受注番号ならび), 受注番号を鍵にデータベースからの選択(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量)),LL1). 受注番号を鍵にデータベースを結合(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量) :- メイン(_受注番号,_受注日,_注文社), サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_商品カテゴリ,_納品番号). 受注番号順に表示する(LL1) :- 整列(LL1,LL2), 表示する(LL2). 表示する(LL) :- 見出しを表示する, forall(append(_,[[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量]|_],LL), writef('%10l %8l %8c %8c %8c %14l %8r\n',[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量])). 見出しを表示する :- write('受注番号 受注日 注文者 商品コード 商品名 数量\n'). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #773 # ・DBMS名とバージョン: Access2003 # ・テーブルデータ: ID、作業開始日、作業完了日、作業区分 # ・欲しい結果 #  一定期間の作業開始日及び作業完了日を日付別にカウントしたい。 # ・説明 # 例えば、2012/06/01から2012/06/07の期間を指定した場合、以下の様に取得したい。 # # 日付     作業開始 作業完了 # 2012/06/01    10      10 # 2012/06/02     5      5 # 2012/06/03    20      15 # 2012/06/04    21      20 # 2012/06/05     7      10 # 2012/06/06    10      15 # 2012/06/07     4      10 # # '一定期間の作業開始及び作業完了を日付別に作業開始・終了度数を得る'(_期間日下限,_期間日上限,_日付,_作業開始度数,_作業終了度数) :- 一定期間の作業開始及び作業完了を(_期間日下限,_期間日上限,_日付ならび), '日付別に作業開始・終了度数を得る'(_日付ならび,_日付,_作業開始度数,_作業終了度数). 一定期間の作業開始及び作業完了を(_期間日下限,_期間日上限,_日付ならび) :- setof(_日付,[_ID,_作業開始日,_作業完了日,_作業区分,_期間日下限,_期間日上限,_日付] ^ ( テーブルデータの作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付)),_日付ならび). テーブルデータの作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付) :- テーブルデータ(_ID,_作業開始日,_作業完了日,_作業区分), 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付). 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_作業開始日) :- _作業開始日 @>= _期間日下限, _作業開始日 @=< _期間日上限. 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_作業完了日) :- _作業完了日 @>= _期間日下限, _作業完了日 @=< _期間日上限. '日付別に作業開始・終了度数を得る'(_日付ならび,_日付,_作業開始度数,_作業終了度数) :- 日付別に(_日付ならび,_日付), '作業開始・終了度数を得る'(_日付,_作業開始度数,_作業終了度数). 日付別に(_日付ならび,_日付) :- member(_日付,_日付ならび). '作業開始・終了度数を得る'(_日付,_作業開始度数,_作業終了度数) :- 度数(テーブルデータ(_,_日付,_,_),_作業開始度数), 度数(テーブルデータ(_,_,_日付,_),_作業終了度数). 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). テーブルデータ(1,'20120401','20120517','A'). テーブルデータ(2,'20120401','20120528','A'). テーブルデータ(3,'20120401','20120526','A'). テーブルデータ(4,'20120401','20120524','A'). テーブルデータ(5,'20120401','20120526','A'). テーブルデータ(6,'20120401','20120517','A'). テーブルデータ(7,'20120401','20120413','A'). テーブルデータ(8,'20120401','20120410','A'). テーブルデータ(9,'20120401','20120402','A'). テーブルデータ(10,'20120401','20120403','A'). テーブルデータ(11,'20120401','20120408','A'). テーブルデータ(12,'20120401','20120521','A'). テーブルデータ(13,'20120401','20120420','A'). テーブルデータ(14,'20120401','20120424','A'). テーブルデータ(15,'20120402','20120402','A'). テーブルデータ(16,'20120402','20120408','A'). テーブルデータ(17,'20120402','20120524','A'). テーブルデータ(18,'20120402','20120418','A'). テーブルデータ(19,'20120402','20120413','A'). テーブルデータ(20,'20120402','20120410','A'). テーブルデータ(21,'20120402','20120429','A'). テーブルデータ(22,'20120402','20120411','A'). テーブルデータ(23,'20120402','20120404','A'). テーブルデータ(24,'20120402','20120522','A'). テーブルデータ(25,'20120402','20120404','A'). テーブルデータ(26,'20120402','20120515','A'). テーブルデータ(27,'20120402','20120409','A'). テーブルデータ(28,'20120402','20120527','A'). テーブルデータ(29,'20120402','20120501','A'). テーブルデータ(30,'20120402','20120514','A'). テーブルデータ(31,'20120402','20120514','A'). テーブルデータ(32,'20120403','20120502','A'). テーブルデータ(33,'20120403','20120430','A'). テーブルデータ(34,'20120403','20120416','A'). テーブルデータ(35,'20120403','20120419','A'). テーブルデータ(36,'20120403','20120504','A'). テーブルデータ(37,'20120403','20120425','A'). テーブルデータ(38,'20120403','20120412','A'). テーブルデータ(39,'20120403','20120506','A'). テーブルデータ(40,'20120403','20120424','A'). テーブルデータ(41,'20120403','20120601','A'). テーブルデータ(42,'20120403','20120517','A'). テーブルデータ(43,'20120403','20120510','A'). テーブルデータ(44,'20120403','20120511','A'). テーブルデータ(45,'20120403','20120517','A'). テーブルデータ(46,'20120403','20120508','A'). テーブルデータ(47,'20120403','20120503','A'). テーブルデータ(48,'20120403','20120526','A'). テーブルデータ(49,'20120403','20120519','A'). テーブルデータ(50,'20120403','20120504','A'). テーブルデータ(51,'20120404','20120530','A'). テーブルデータ(52,'20120404','20120507','A'). テーブルデータ(53,'20120404','20120406','A'). テーブルデータ(54,'20120404','20120524','A'). テーブルデータ(55,'20120404','20120420','A'). テーブルデータ(56,'20120404','20120405','A'). テーブルデータ(57,'20120404','20120519','A'). テーブルデータ(58,'20120404','20120519','A'). テーブルデータ(59,'20120404','20120518','A'). テーブルデータ(60,'20120404','20120501','A'). テーブルデータ(61,'20120404','20120530','A'). テーブルデータ(62,'20120404','20120409','A'). テーブルデータ(63,'20120404','20120520','A'). テーブルデータ(64,'20120404','20120413','A'). テーブルデータ(65,'20120404','20120417','A'). テーブルデータ(66,'20120404','20120421','A'). テーブルデータ(67,'20120404','20120428','A'). テーブルデータ(68,'20120404','20120419','A'). テーブルデータ(69,'20120404','20120516','A'). テーブルデータ(70,'20120404','20120519','A'). テーブルデータ(71,'20120404','20120418','A'). テーブルデータ(72,'20120405','20120419','A'). テーブルデータ(73,'20120405','20120519','A'). テーブルデータ(74,'20120405','20120408','A'). テーブルデータ(75,'20120405','20120525','A'). テーブルデータ(76,'20120405','20120412','A'). テーブルデータ(77,'20120405','20120523','A'). テーブルデータ(78,'20120405','20120511','A'). テーブルデータ(79,'20120405','20120513','A'). テーブルデータ(80,'20120405','20120413','A'). テーブルデータ(81,'20120405','20120429','A'). テーブルデータ(82,'20120405','20120408','A'). テーブルデータ(83,'20120405','20120416','A'). テーブルデータ(84,'20120405','20120419','A'). テーブルデータ(85,'20120405','20120424','A'). テーブルデータ(86,'20120405','20120417','A'). テーブルデータ(87,'20120405','20120405','A'). テーブルデータ(88,'20120405','20120531','A'). テーブルデータ(89,'20120405','20120523','A'). テーブルデータ(90,'20120405','20120424','A'). テーブルデータ(91,'20120405','20120527','A'). テーブルデータ(92,'20120405','20120521','A'). テーブルデータ(93,'20120405','20120411','A'). テーブルデータ(94,'20120405','20120529','A'). テーブルデータ(95,'20120405','20120603','A'). テーブルデータ(96,'20120405','20120420','A'). テーブルデータ(97,'20120405','20120415','A'). テーブルデータ(98,'20120405','20120419','A'). テーブルデータ(99,'20120405','20120602','A'). テーブルデータ(100,'20120406','20120427','A'). テーブルデータ(101,'20120406','20120423','A'). テーブルデータ(102,'20120406','20120408','A'). テーブルデータ(103,'20120406','20120602','A'). テーブルデータ(104,'20120406','20120418','A'). テーブルデータ(105,'20120406','20120528','A'). テーブルデータ(106,'20120406','20120601','A'). テーブルデータ(107,'20120406','20120407','A'). テーブルデータ(108,'20120406','20120426','A'). テーブルデータ(109,'20120406','20120502','A'). テーブルデータ(110,'20120406','20120407','A'). テーブルデータ(111,'20120406','20120521','A'). テーブルデータ(112,'20120406','20120505','A'). テーブルデータ(113,'20120406','20120410','A'). テーブルデータ(114,'20120406','20120604','A'). テーブルデータ(115,'20120406','20120516','A'). テーブルデータ(116,'20120406','20120415','A'). テーブルデータ(117,'20120406','20120527','A'). テーブルデータ(118,'20120407','20120603','A'). テーブルデータ(119,'20120407','20120418','A'). テーブルデータ(120,'20120407','20120428','A'). テーブルデータ(121,'20120407','20120512','A'). テーブルデータ(122,'20120407','20120416','A'). テーブルデータ(123,'20120407','20120414','A'). テーブルデータ(124,'20120407','20120504','A'). テーブルデータ(125,'20120407','20120423','A'). テーブルデータ(126,'20120408','20120511','A'). テーブルデータ(127,'20120408','20120414','A'). テーブルデータ(128,'20120408','20120413','A'). テーブルデータ(129,'20120408','20120524','A'). テーブルデータ(130,'20120408','20120501','A'). テーブルデータ(131,'20120408','20120606','A'). テーブルデータ(132,'20120408','20120522','A'). テーブルデータ(133,'20120408','20120506','A'). テーブルデータ(134,'20120408','20120529','A'). テーブルデータ(135,'20120408','20120510','A'). テーブルデータ(136,'20120408','20120507','A'). テーブルデータ(137,'20120408','20120411','A'). テーブルデータ(138,'20120408','20120606','A'). テーブルデータ(139,'20120408','20120508','A'). テーブルデータ(140,'20120408','20120526','A'). テーブルデータ(141,'20120408','20120506','A'). テーブルデータ(142,'20120408','20120513','A'). テーブルデータ(143,'20120408','20120518','A'). テーブルデータ(144,'20120409','20120515','A'). テーブルデータ(145,'20120409','20120502','A'). テーブルデータ(146,'20120409','20120517','A'). テーブルデータ(147,'20120409','20120504','A'). テーブルデータ(148,'20120409','20120505','A'). テーブルデータ(149,'20120409','20120530','A'). テーブルデータ(150,'20120409','20120410','A'). テーブルデータ(151,'20120409','20120514','A'). テーブルデータ(152,'20120409','20120607','A'). テーブルデータ(153,'20120409','20120507','A'). テーブルデータ(154,'20120410','20120418','A'). テーブルデータ(155,'20120410','20120411','A'). テーブルデータ(156,'20120410','20120530','A'). テーブルデータ(157,'20120410','20120423','A'). テーブルデータ(158,'20120410','20120520','A'). テーブルデータ(159,'20120410','20120424','A'). テーブルデータ(160,'20120410','20120414','A'). テーブルデータ(161,'20120410','20120504','A'). テーブルデータ(162,'20120410','20120514','A'). テーブルデータ(163,'20120410','20120527','A'). テーブルデータ(164,'20120410','20120605','A'). テーブルデータ(165,'20120410','20120413','A'). テーブルデータ(166,'20120410','20120531','A'). テーブルデータ(167,'20120410','20120527','A'). テーブルデータ(168,'20120410','20120505','A'). テーブルデータ(169,'20120411','20120427','A'). テーブルデータ(170,'20120411','20120602','A'). テーブルデータ(171,'20120411','20120422','A'). テーブルデータ(172,'20120411','20120428','A'). テーブルデータ(173,'20120411','20120509','A'). テーブルデータ(174,'20120411','20120516','A'). テーブルデータ(175,'20120411','20120528','A'). テーブルデータ(176,'20120411','20120604','A'). テーブルデータ(177,'20120411','20120412','A'). テーブルデータ(178,'20120411','20120519','A'). テーブルデータ(179,'20120412','20120511','A'). テーブルデータ(180,'20120412','20120519','A'). テーブルデータ(181,'20120412','20120427','A'). テーブルデータ(182,'20120412','20120425','A'). テーブルデータ(183,'20120412','20120520','A'). テーブルデータ(184,'20120412','20120420','A'). テーブルデータ(185,'20120412','20120415','A'). テーブルデータ(186,'20120412','20120602','A'). テーブルデータ(187,'20120412','20120530','A'). テーブルデータ(188,'20120412','20120421','A'). テーブルデータ(189,'20120412','20120607','A'). テーブルデータ(190,'20120412','20120416','A'). テーブルデータ(191,'20120412','20120525','A'). テーブルデータ(192,'20120412','20120525','A'). テーブルデータ(193,'20120412','20120604','A'). テーブルデータ(194,'20120412','20120520','A'). テーブルデータ(195,'20120412','20120508','A'). テーブルデータ(196,'20120412','20120522','A'). テーブルデータ(197,'20120412','20120416','A'). テーブルデータ(198,'20120412','20120609','A'). テーブルデータ(199,'20120412','20120530','A'). テーブルデータ(200,'20120412','20120530','A'). テーブルデータ(201,'20120412','20120421','A'). テーブルデータ(202,'20120412','20120608','A'). テーブルデータ(203,'20120412','20120429','A'). テーブルデータ(204,'20120412','20120518','A'). テーブルデータ(205,'20120413','20120416','A'). テーブルデータ(206,'20120413','20120513','A'). テーブルデータ(207,'20120413','20120506','A'). テーブルデータ(208,'20120413','20120602','A'). テーブルデータ(209,'20120413','20120611','A'). テーブルデータ(210,'20120413','20120604','A'). テーブルデータ(211,'20120413','20120418','A'). テーブルデータ(212,'20120413','20120417','A'). テーブルデータ(213,'20120413','20120513','A'). テーブルデータ(214,'20120413','20120418','A'). テーブルデータ(215,'20120413','20120611','A'). テーブルデータ(216,'20120413','20120427','A'). テーブルデータ(217,'20120413','20120529','A'). テーブルデータ(218,'20120413','20120422','A'). テーブルデータ(219,'20120413','20120415','A'). テーブルデータ(220,'20120414','20120528','A'). テーブルデータ(221,'20120414','20120521','A'). テーブルデータ(222,'20120414','20120511','A'). テーブルデータ(223,'20120414','20120429','A'). テーブルデータ(224,'20120414','20120418','A'). テーブルデータ(225,'20120414','20120422','A'). テーブルデータ(226,'20120414','20120425','A'). テーブルデータ(227,'20120414','20120416','A'). テーブルデータ(228,'20120414','20120601','A'). テーブルデータ(229,'20120414','20120612','A'). テーブルデータ(230,'20120414','20120417','A'). テーブルデータ(231,'20120414','20120530','A'). テーブルデータ(232,'20120414','20120422','A'). テーブルデータ(233,'20120415','20120507','A'). テーブルデータ(234,'20120415','20120426','A'). テーブルデータ(235,'20120415','20120425','A'). テーブルデータ(236,'20120415','20120530','A'). テーブルデータ(237,'20120415','20120416','A'). テーブルデータ(238,'20120415','20120416','A'). テーブルデータ(239,'20120415','20120515','A'). テーブルデータ(240,'20120415','20120612','A'). テーブルデータ(241,'20120415','20120420','A'). テーブルデータ(242,'20120415','20120415','A'). テーブルデータ(243,'20120415','20120610','A'). テーブルデータ(244,'20120416','20120422','A'). テーブルデータ(245,'20120416','20120528','A'). テーブルデータ(246,'20120416','20120421','A'). テーブルデータ(247,'20120416','20120424','A'). テーブルデータ(248,'20120416','20120502','A'). テーブルデータ(249,'20120417','20120525','A'). テーブルデータ(250,'20120417','20120531','A'). テーブルデータ(251,'20120417','20120613','A'). テーブルデータ(252,'20120417','20120529','A'). テーブルデータ(253,'20120417','20120531','A'). テーブルデータ(254,'20120417','20120417','A'). テーブルデータ(255,'20120417','20120523','A'). テーブルデータ(256,'20120417','20120519','A'). テーブルデータ(257,'20120417','20120615','A'). テーブルデータ(258,'20120417','20120526','A'). テーブルデータ(259,'20120417','20120427','A'). テーブルデータ(260,'20120417','20120425','A'). テーブルデータ(261,'20120417','20120428','A'). テーブルデータ(262,'20120418','20120429','A'). テーブルデータ(263,'20120418','20120509','A'). テーブルデータ(264,'20120418','20120428','A'). テーブルデータ(265,'20120418','20120501','A'). テーブルデータ(266,'20120419','20120529','A'). テーブルデータ(267,'20120419','20120422','A'). テーブルデータ(268,'20120419','20120508','A'). テーブルデータ(269,'20120419','20120530','A'). テーブルデータ(270,'20120419','20120617','A'). テーブルデータ(271,'20120419','20120505','A'). テーブルデータ(272,'20120419','20120528','A'). テーブルデータ(273,'20120419','20120522','A'). テーブルデータ(274,'20120419','20120502','A'). テーブルデータ(275,'20120419','20120606','A'). テーブルデータ(276,'20120419','20120608','A'). テーブルデータ(277,'20120419','20120613','A'). テーブルデータ(278,'20120419','20120515','A'). テーブルデータ(279,'20120419','20120515','A'). テーブルデータ(280,'20120419','20120602','A'). テーブルデータ(281,'20120420','20120430','A'). テーブルデータ(282,'20120421','20120527','A'). テーブルデータ(283,'20120421','20120602','A'). テーブルデータ(284,'20120421','20120527','A'). テーブルデータ(285,'20120421','20120428','A'). テーブルデータ(286,'20120421','20120605','A'). テーブルデータ(287,'20120421','20120527','A'). テーブルデータ(288,'20120421','20120510','A'). テーブルデータ(289,'20120421','20120509','A'). テーブルデータ(290,'20120421','20120607','A'). テーブルデータ(291,'20120421','20120523','A'). テーブルデータ(292,'20120421','20120519','A'). テーブルデータ(293,'20120421','20120612','A'). テーブルデータ(294,'20120421','20120530','A'). テーブルデータ(295,'20120421','20120430','A'). テーブルデータ(296,'20120421','20120616','A'). テーブルデータ(297,'20120422','20120603','A'). テーブルデータ(298,'20120422','20120608','A'). テーブルデータ(299,'20120422','20120428','A'). テーブルデータ(300,'20120422','20120513','A'). テーブルデータ(301,'20120422','20120505','A'). テーブルデータ(302,'20120422','20120504','A'). テーブルデータ(303,'20120422','20120423','A'). テーブルデータ(304,'20120422','20120616','A'). テーブルデータ(305,'20120422','20120620','A'). テーブルデータ(306,'20120422','20120511','A'). テーブルデータ(307,'20120422','20120513','A'). テーブルデータ(308,'20120422','20120605','A'). テーブルデータ(309,'20120422','20120511','A'). テーブルデータ(310,'20120422','20120523','A'). テーブルデータ(311,'20120422','20120512','A'). テーブルデータ(312,'20120422','20120608','A'). テーブルデータ(313,'20120422','20120427','A'). テーブルデータ(314,'20120422','20120609','A'). テーブルデータ(315,'20120422','20120608','A'). テーブルデータ(316,'20120422','20120611','A'). テーブルデータ(317,'20120422','20120516','A'). テーブルデータ(318,'20120423','20120423','A'). テーブルデータ(319,'20120423','20120427','A'). テーブルデータ(320,'20120423','20120515','A'). テーブルデータ(321,'20120423','20120522','A'). テーブルデータ(322,'20120423','20120618','A'). テーブルデータ(323,'20120423','20120424','A'). テーブルデータ(324,'20120423','20120523','A'). テーブルデータ(325,'20120423','20120606','A'). テーブルデータ(326,'20120423','20120614','A'). テーブルデータ(327,'20120423','20120505','A'). テーブルデータ(328,'20120423','20120525','A'). テーブルデータ(329,'20120423','20120612','A'). テーブルデータ(330,'20120423','20120518','A'). テーブルデータ(331,'20120423','20120607','A'). テーブルデータ(332,'20120423','20120425','A'). テーブルデータ(333,'20120423','20120512','A'). テーブルデータ(334,'20120423','20120602','A'). テーブルデータ(335,'20120423','20120425','A'). テーブルデータ(336,'20120423','20120531','A'). テーブルデータ(337,'20120423','20120615','A'). テーブルデータ(338,'20120423','20120531','A'). テーブルデータ(339,'20120423','20120612','A'). テーブルデータ(340,'20120423','20120517','A'). テーブルデータ(341,'20120423','20120612','A'). テーブルデータ(342,'20120423','20120522','A'). テーブルデータ(343,'20120423','20120514','A'). テーブルデータ(344,'20120423','20120601','A'). テーブルデータ(345,'20120423','20120509','A'). テーブルデータ(346,'20120423','20120505','A'). テーブルデータ(347,'20120424','20120508','A'). テーブルデータ(348,'20120424','20120428','A'). テーブルデータ(349,'20120424','20120622','A'). テーブルデータ(350,'20120424','20120523','A'). テーブルデータ(351,'20120424','20120527','A'). テーブルデータ(352,'20120424','20120619','A'). テーブルデータ(353,'20120424','20120524','A'). テーブルデータ(354,'20120424','20120618','A'). テーブルデータ(355,'20120424','20120603','A'). テーブルデータ(356,'20120424','20120516','A'). テーブルデータ(357,'20120424','20120622','A'). テーブルデータ(358,'20120424','20120428','A'). テーブルデータ(359,'20120424','20120507','A'). テーブルデータ(360,'20120424','20120519','A'). テーブルデータ(361,'20120424','20120604','A'). テーブルデータ(362,'20120424','20120501','A'). テーブルデータ(363,'20120424','20120607','A'). テーブルデータ(364,'20120424','20120507','A'). テーブルデータ(365,'20120424','20120425','A'). テーブルデータ(366,'20120424','20120508','A'). テーブルデータ(367,'20120424','20120430','A'). テーブルデータ(368,'20120424','20120602','A'). テーブルデータ(369,'20120424','20120428','A'). テーブルデータ(370,'20120424','20120516','A'). テーブルデータ(371,'20120424','20120516','A'). テーブルデータ(372,'20120424','20120520','A'). テーブルデータ(373,'20120425','20120426','A'). テーブルデータ(374,'20120425','20120606','A'). テーブルデータ(375,'20120425','20120612','A'). テーブルデータ(376,'20120425','20120612','A'). テーブルデータ(377,'20120425','20120613','A'). テーブルデータ(378,'20120425','20120616','A'). テーブルデータ(379,'20120425','20120612','A'). テーブルデータ(380,'20120425','20120513','A'). テーブルデータ(381,'20120425','20120513','A'). テーブルデータ(382,'20120425','20120531','A'). テーブルデータ(383,'20120425','20120612','A'). テーブルデータ(384,'20120425','20120508','A'). テーブルデータ(385,'20120425','20120503','A'). テーブルデータ(386,'20120425','20120428','A'). テーブルデータ(387,'20120425','20120508','A'). テーブルデータ(388,'20120426','20120504','A'). テーブルデータ(389,'20120426','20120526','A'). テーブルデータ(390,'20120426','20120619','A'). テーブルデータ(391,'20120426','20120503','A'). テーブルデータ(392,'20120426','20120502','A'). テーブルデータ(393,'20120426','20120504','A'). テーブルデータ(394,'20120426','20120505','A'). テーブルデータ(395,'20120426','20120516','A'). テーブルデータ(396,'20120426','20120502','A'). テーブルデータ(397,'20120426','20120613','A'). テーブルデータ(398,'20120426','20120513','A'). テーブルデータ(399,'20120426','20120525','A'). テーブルデータ(400,'20120426','20120506','A'). テーブルデータ(401,'20120426','20120608','A'). テーブルデータ(402,'20120427','20120430','A'). テーブルデータ(403,'20120427','20120514','A'). テーブルデータ(404,'20120427','20120619','A'). テーブルデータ(405,'20120427','20120618','A'). テーブルデータ(406,'20120427','20120503','A'). テーブルデータ(407,'20120427','20120611','A'). テーブルデータ(408,'20120427','20120529','A'). テーブルデータ(409,'20120427','20120513','A'). テーブルデータ(410,'20120427','20120621','A'). テーブルデータ(411,'20120427','20120505','A'). テーブルデータ(412,'20120427','20120623','A'). テーブルデータ(413,'20120427','20120506','A'). テーブルデータ(414,'20120427','20120513','A'). テーブルデータ(415,'20120427','20120427','A'). テーブルデータ(416,'20120428','20120519','A'). テーブルデータ(417,'20120428','20120428','A'). テーブルデータ(418,'20120428','20120611','A'). テーブルデータ(419,'20120428','20120506','A'). テーブルデータ(420,'20120428','20120505','A'). テーブルデータ(421,'20120428','20120617','A'). テーブルデータ(422,'20120428','20120506','A'). テーブルデータ(423,'20120428','20120514','A'). テーブルデータ(424,'20120428','20120430','A'). テーブルデータ(425,'20120428','20120512','A'). テーブルデータ(426,'20120428','20120624','A'). テーブルデータ(427,'20120428','20120517','A'). テーブルデータ(428,'20120428','20120610','A'). テーブルデータ(429,'20120428','20120626','A'). テーブルデータ(430,'20120428','20120430','A'). テーブルデータ(431,'20120429','20120502','A'). テーブルデータ(432,'20120429','20120519','A'). テーブルデータ(433,'20120429','20120609','A'). テーブルデータ(434,'20120429','20120615','A'). テーブルデータ(435,'20120429','20120517','A'). テーブルデータ(436,'20120429','20120518','A'). テーブルデータ(437,'20120429','20120510','A'). テーブルデータ(438,'20120429','20120603','A'). テーブルデータ(439,'20120429','20120513','A'). テーブルデータ(440,'20120429','20120518','A'). テーブルデータ(441,'20120429','20120531','A'). テーブルデータ(442,'20120429','20120514','A'). テーブルデータ(443,'20120429','20120526','A'). テーブルデータ(444,'20120429','20120523','A'). テーブルデータ(445,'20120429','20120528','A'). テーブルデータ(446,'20120429','20120617','A'). テーブルデータ(447,'20120429','20120523','A'). テーブルデータ(448,'20120429','20120504','A'). テーブルデータ(449,'20120429','20120617','A'). テーブルデータ(450,'20120430','20120624','A'). テーブルデータ(451,'20120430','20120626','A'). テーブルデータ(452,'20120430','20120609','A'). テーブルデータ(453,'20120430','20120627','A'). テーブルデータ(454,'20120430','20120511','A'). テーブルデータ(455,'20120430','20120529','A'). テーブルデータ(456,'20120430','20120509','A'). テーブルデータ(457,'20120430','20120616','A'). テーブルデータ(458,'20120430','20120528','A'). テーブルデータ(459,'20120430','20120512','A'). テーブルデータ(460,'20120430','20120604','A'). テーブルデータ(461,'20120430','20120523','A'). テーブルデータ(462,'20120430','20120524','A'). テーブルデータ(463,'20120430','20120509','A'). テーブルデータ(464,'20120430','20120510','A'). テーブルデータ(465,'20120430','20120611','A'). テーブルデータ(466,'20120430','20120520','A'). テーブルデータ(467,'20120430','20120521','A'). テーブルデータ(468,'20120430','20120509','A'). テーブルデータ(469,'20120430','20120526','A'). テーブルデータ(470,'20120430','20120601','A'). テーブルデータ(471,'20120430','20120610','A'). テーブルデータ(472,'20120430','20120611','A'). テーブルデータ(473,'20120430','20120430','A'). テーブルデータ(474,'20120501','20120504','A'). テーブルデータ(475,'20120501','20120611','A'). テーブルデータ(476,'20120501','20120522','A'). テーブルデータ(477,'20120501','20120510','A'). テーブルデータ(478,'20120501','20120531','A'). テーブルデータ(479,'20120501','20120615','A'). テーブルデータ(480,'20120501','20120626','A'). テーブルデータ(481,'20120501','20120528','A'). テーブルデータ(482,'20120501','20120518','A'). テーブルデータ(483,'20120501','20120624','A'). テーブルデータ(484,'20120501','20120531','A'). テーブルデータ(485,'20120501','20120616','A'). テーブルデータ(486,'20120501','20120505','A'). テーブルデータ(487,'20120501','20120518','A'). テーブルデータ(488,'20120501','20120515','A'). テーブルデータ(489,'20120501','20120509','A'). テーブルデータ(490,'20120501','20120615','A'). テーブルデータ(491,'20120501','20120608','A'). テーブルデータ(492,'20120501','20120602','A'). テーブルデータ(493,'20120501','20120616','A'). テーブルデータ(494,'20120501','20120610','A'). テーブルデータ(495,'20120501','20120507','A'). テーブルデータ(496,'20120501','20120507','A'). テーブルデータ(497,'20120501','20120624','A'). テーブルデータ(498,'20120501','20120517','A'). テーブルデータ(499,'20120501','20120602','A'). テーブルデータ(500,'20120501','20120519','A'). テーブルデータ(501,'20120501','20120619','A'). テーブルデータ(502,'20120502','20120512','A'). テーブルデータ(503,'20120502','20120618','A'). テーブルデータ(504,'20120502','20120512','A'). テーブルデータ(505,'20120502','20120622','A'). テーブルデータ(506,'20120502','20120502','A'). テーブルデータ(507,'20120502','20120513','A'). テーブルデータ(508,'20120502','20120515','A'). テーブルデータ(509,'20120503','20120510','A'). テーブルデータ(510,'20120503','20120604','A'). テーブルデータ(511,'20120503','20120618','A'). テーブルデータ(512,'20120503','20120626','A'). テーブルデータ(513,'20120503','20120627','A'). テーブルデータ(514,'20120503','20120604','A'). テーブルデータ(515,'20120503','20120622','A'). テーブルデータ(516,'20120503','20120515','A'). テーブルデータ(517,'20120504','20120623','A'). テーブルデータ(518,'20120504','20120622','A'). テーブルデータ(519,'20120504','20120513','A'). テーブルデータ(520,'20120504','20120518','A'). テーブルデータ(521,'20120504','20120608','A'). テーブルデータ(522,'20120504','20120614','A'). テーブルデータ(523,'20120504','20120524','A'). テーブルデータ(524,'20120504','20120606','A'). テーブルデータ(525,'20120504','20120531','A'). テーブルデータ(526,'20120504','20120601','A'). テーブルデータ(527,'20120505','20120620','A'). テーブルデータ(528,'20120505','20120515','A'). テーブルデータ(529,'20120505','20120509','A'). テーブルデータ(530,'20120505','20120630','A'). テーブルデータ(531,'20120505','20120701','A'). テーブルデータ(532,'20120505','20120511','A'). テーブルデータ(533,'20120505','20120614','A'). テーブルデータ(534,'20120505','20120623','A'). テーブルデータ(535,'20120505','20120522','A'). テーブルデータ(536,'20120505','20120619','A'). テーブルデータ(537,'20120505','20120524','A'). テーブルデータ(538,'20120505','20120522','A'). テーブルデータ(539,'20120505','20120523','A'). テーブルデータ(540,'20120505','20120510','A'). テーブルデータ(541,'20120505','20120508','A'). テーブルデータ(542,'20120505','20120518','A'). テーブルデータ(543,'20120505','20120612','A'). テーブルデータ(544,'20120505','20120627','A'). テーブルデータ(545,'20120505','20120522','A'). テーブルデータ(546,'20120505','20120514','A'). テーブルデータ(547,'20120505','20120617','A'). テーブルデータ(548,'20120505','20120512','A'). テーブルデータ(549,'20120505','20120523','A'). テーブルデータ(550,'20120505','20120701','A'). テーブルデータ(551,'20120505','20120608','A'). テーブルデータ(552,'20120505','20120625','A'). テーブルデータ(553,'20120505','20120514','A'). テーブルデータ(554,'20120505','20120505','A'). テーブルデータ(555,'20120505','20120524','A'). テーブルデータ(556,'20120506','20120703','A'). テーブルデータ(557,'20120506','20120511','A'). テーブルデータ(558,'20120506','20120623','A'). テーブルデータ(559,'20120506','20120629','A'). テーブルデータ(560,'20120506','20120628','A'). テーブルデータ(561,'20120506','20120612','A'). テーブルデータ(562,'20120506','20120507','A'). テーブルデータ(563,'20120506','20120608','A'). テーブルデータ(564,'20120506','20120524','A'). テーブルデータ(565,'20120507','20120526','A'). テーブルデータ(566,'20120507','20120613','A'). テーブルデータ(567,'20120507','20120526','A'). テーブルデータ(568,'20120507','20120605','A'). テーブルデータ(569,'20120507','20120619','A'). テーブルデータ(570,'20120507','20120529','A'). テーブルデータ(571,'20120507','20120610','A'). テーブルデータ(572,'20120507','20120520','A'). テーブルデータ(573,'20120507','20120514','A'). テーブルデータ(574,'20120507','20120627','A'). テーブルデータ(575,'20120507','20120529','A'). テーブルデータ(576,'20120508','20120627','A'). テーブルデータ(577,'20120508','20120609','A'). テーブルデータ(578,'20120508','20120608','A'). テーブルデータ(579,'20120508','20120525','A'). テーブルデータ(580,'20120508','20120523','A'). テーブルデータ(581,'20120508','20120618','A'). テーブルデータ(582,'20120508','20120525','A'). テーブルデータ(583,'20120508','20120611','A'). テーブルデータ(584,'20120508','20120519','A'). テーブルデータ(585,'20120508','20120515','A'). テーブルデータ(586,'20120508','20120608','A'). テーブルデータ(587,'20120508','20120628','A'). テーブルデータ(588,'20120508','20120509','A'). テーブルデータ(589,'20120509','20120529','A'). テーブルデータ(590,'20120509','20120702','A'). テーブルデータ(591,'20120509','20120628','A'). テーブルデータ(592,'20120509','20120616','A'). テーブルデータ(593,'20120509','20120514','A'). テーブルデータ(594,'20120509','20120510','A'). テーブルデータ(595,'20120509','20120525','A'). テーブルデータ(596,'20120509','20120525','A'). テーブルデータ(597,'20120509','20120531','A'). テーブルデータ(598,'20120509','20120629','A'). テーブルデータ(599,'20120509','20120617','A'). テーブルデータ(600,'20120509','20120704','A'). テーブルデータ(601,'20120509','20120513','A'). テーブルデータ(602,'20120509','20120616','A'). テーブルデータ(603,'20120509','20120618','A'). テーブルデータ(604,'20120509','20120527','A'). テーブルデータ(605,'20120509','20120530','A'). テーブルデータ(606,'20120509','20120608','A'). テーブルデータ(607,'20120510','20120701','A'). テーブルデータ(608,'20120510','20120618','A'). テーブルデータ(609,'20120510','20120706','A'). テーブルデータ(610,'20120510','20120604','A'). テーブルデータ(611,'20120510','20120705','A'). テーブルデータ(612,'20120510','20120603','A'). テーブルデータ(613,'20120510','20120615','A'). テーブルデータ(614,'20120510','20120513','A'). テーブルデータ(615,'20120510','20120626','A'). テーブルデータ(616,'20120510','20120529','A'). テーブルデータ(617,'20120510','20120706','A'). テーブルデータ(618,'20120510','20120514','A'). テーブルデータ(619,'20120510','20120618','A'). テーブルデータ(620,'20120511','20120627','A'). テーブルデータ(621,'20120511','20120521','A'). テーブルデータ(622,'20120511','20120706','A'). テーブルデータ(623,'20120511','20120620','A'). テーブルデータ(624,'20120511','20120529','A'). テーブルデータ(625,'20120511','20120516','A'). テーブルデータ(626,'20120511','20120514','A'). テーブルデータ(627,'20120511','20120520','A'). テーブルデータ(628,'20120511','20120624','A'). テーブルデータ(629,'20120511','20120701','A'). テーブルデータ(630,'20120511','20120516','A'). テーブルデータ(631,'20120511','20120525','A'). テーブルデータ(632,'20120511','20120611','A'). テーブルデータ(633,'20120511','20120526','A'). テーブルデータ(634,'20120511','20120615','A'). テーブルデータ(635,'20120511','20120704','A'). テーブルデータ(636,'20120511','20120629','A'). テーブルデータ(637,'20120511','20120608','A'). テーブルデータ(638,'20120511','20120613','A'). テーブルデータ(639,'20120511','20120618','A'). テーブルデータ(640,'20120511','20120625','A'). テーブルデータ(641,'20120511','20120602','A'). テーブルデータ(642,'20120512','20120603','A'). テーブルデータ(643,'20120512','20120529','A'). テーブルデータ(644,'20120512','20120701','A'). テーブルデータ(645,'20120513','20120527','A'). テーブルデータ(646,'20120513','20120628','A'). テーブルデータ(647,'20120513','20120526','A'). テーブルデータ(648,'20120513','20120519','A'). テーブルデータ(649,'20120514','20120606','A'). テーブルデータ(650,'20120514','20120707','A'). テーブルデータ(651,'20120514','20120528','A'). テーブルデータ(652,'20120514','20120616','A'). テーブルデータ(653,'20120515','20120601','A'). テーブルデータ(654,'20120515','20120626','A'). テーブルデータ(655,'20120515','20120619','A'). テーブルデータ(656,'20120515','20120523','A'). テーブルデータ(657,'20120515','20120623','A'). テーブルデータ(658,'20120515','20120704','A'). テーブルデータ(659,'20120515','20120616','A'). テーブルデータ(660,'20120515','20120708','A'). テーブルデータ(661,'20120515','20120601','A'). テーブルデータ(662,'20120515','20120610','A'). テーブルデータ(663,'20120515','20120619','A'). テーブルデータ(664,'20120515','20120621','A'). テーブルデータ(665,'20120515','20120705','A'). テーブルデータ(666,'20120515','20120528','A'). テーブルデータ(667,'20120515','20120607','A'). テーブルデータ(668,'20120515','20120528','A'). テーブルデータ(669,'20120515','20120523','A'). テーブルデータ(670,'20120515','20120629','A'). テーブルデータ(671,'20120515','20120615','A'). テーブルデータ(672,'20120515','20120704','A'). テーブルデータ(673,'20120515','20120602','A'). テーブルデータ(674,'20120515','20120621','A'). テーブルデータ(675,'20120515','20120620','A'). テーブルデータ(676,'20120515','20120607','A'). テーブルデータ(677,'20120515','20120619','A'). テーブルデータ(678,'20120515','20120525','A'). テーブルデータ(679,'20120515','20120622','A'). テーブルデータ(680,'20120515','20120614','A'). テーブルデータ(681,'20120515','20120608','A'). テーブルデータ(682,'20120515','20120526','A'). テーブルデータ(683,'20120516','20120618','A'). テーブルデータ(684,'20120516','20120630','A'). テーブルデータ(685,'20120516','20120704','A'). テーブルデータ(686,'20120516','20120618','A'). テーブルデータ(687,'20120516','20120609','A'). テーブルデータ(688,'20120516','20120616','A'). テーブルデータ(689,'20120516','20120521','A'). テーブルデータ(690,'20120516','20120526','A'). テーブルデータ(691,'20120516','20120703','A'). テーブルデータ(692,'20120516','20120608','A'). テーブルデータ(693,'20120516','20120630','A'). テーブルデータ(694,'20120516','20120611','A'). テーブルデータ(695,'20120516','20120531','A'). テーブルデータ(696,'20120516','20120714','A'). テーブルデータ(697,'20120516','20120704','A'). テーブルデータ(698,'20120516','20120605','A'). テーブルデータ(699,'20120516','20120523','A'). テーブルデータ(700,'20120516','20120611','A'). テーブルデータ(701,'20120516','20120628','A'). テーブルデータ(702,'20120516','20120712','A'). テーブルデータ(703,'20120516','20120621','A'). テーブルデータ(704,'20120516','20120606','A'). テーブルデータ(705,'20120517','20120517','A'). テーブルデータ(706,'20120517','20120712','A'). テーブルデータ(707,'20120517','20120621','A'). テーブルデータ(708,'20120517','20120616','A'). テーブルデータ(709,'20120517','20120604','A'). テーブルデータ(710,'20120517','20120707','A'). テーブルデータ(711,'20120517','20120628','A'). テーブルデータ(712,'20120517','20120618','A'). テーブルデータ(713,'20120517','20120602','A'). テーブルデータ(714,'20120517','20120605','A'). テーブルデータ(715,'20120517','20120607','A'). テーブルデータ(716,'20120517','20120706','A'). テーブルデータ(717,'20120517','20120630','A'). テーブルデータ(718,'20120517','20120708','A'). テーブルデータ(719,'20120517','20120703','A'). テーブルデータ(720,'20120517','20120710','A'). テーブルデータ(721,'20120517','20120626','A'). テーブルデータ(722,'20120517','20120520','A'). テーブルデータ(723,'20120517','20120618','A'). テーブルデータ(724,'20120517','20120714','A'). テーブルデータ(725,'20120517','20120527','A'). テーブルデータ(726,'20120517','20120609','A'). テーブルデータ(727,'20120517','20120703','A'). テーブルデータ(728,'20120517','20120616','A'). テーブルデータ(729,'20120517','20120616','A'). テーブルデータ(730,'20120517','20120530','A'). テーブルデータ(731,'20120518','20120606','A'). テーブルデータ(732,'20120518','20120629','A'). テーブルデータ(733,'20120518','20120614','A'). テーブルデータ(734,'20120518','20120701','A'). テーブルデータ(735,'20120518','20120629','A'). テーブルデータ(736,'20120518','20120602','A'). テーブルデータ(737,'20120518','20120530','A'). テーブルデータ(738,'20120518','20120522','A'). テーブルデータ(739,'20120518','20120621','A'). テーブルデータ(740,'20120518','20120521','A'). テーブルデータ(741,'20120518','20120625','A'). テーブルデータ(742,'20120518','20120524','A'). テーブルデータ(743,'20120518','20120607','A'). テーブルデータ(744,'20120518','20120715','A'). テーブルデータ(745,'20120518','20120606','A'). テーブルデータ(746,'20120519','20120630','A'). テーブルデータ(747,'20120519','20120522','A'). テーブルデータ(748,'20120519','20120629','A'). テーブルデータ(749,'20120520','20120702','A'). テーブルデータ(750,'20120520','20120703','A'). テーブルデータ(751,'20120520','20120711','A'). テーブルデータ(752,'20120520','20120701','A'). テーブルデータ(753,'20120520','20120713','A'). テーブルデータ(754,'20120520','20120604','A'). テーブルデータ(755,'20120520','20120610','A'). テーブルデータ(756,'20120520','20120606','A'). テーブルデータ(757,'20120520','20120704','A'). テーブルデータ(758,'20120520','20120616','A'). テーブルデータ(759,'20120520','20120620','A'). テーブルデータ(760,'20120520','20120715','A'). テーブルデータ(761,'20120520','20120529','A'). テーブルデータ(762,'20120520','20120717','A'). テーブルデータ(763,'20120520','20120630','A'). テーブルデータ(764,'20120520','20120702','A'). テーブルデータ(765,'20120520','20120602','A'). テーブルデータ(766,'20120520','20120712','A'). テーブルデータ(767,'20120520','20120706','A'). テーブルデータ(768,'20120520','20120628','A'). テーブルデータ(769,'20120520','20120707','A'). テーブルデータ(770,'20120520','20120615','A'). テーブルデータ(771,'20120520','20120626','A'). テーブルデータ(772,'20120520','20120520','A'). テーブルデータ(773,'20120520','20120613','A'). テーブルデータ(774,'20120520','20120707','A'). テーブルデータ(775,'20120520','20120713','A'). テーブルデータ(776,'20120520','20120717','A'). テーブルデータ(777,'20120520','20120710','A'). テーブルデータ(778,'20120521','20120608','A'). テーブルデータ(779,'20120521','20120625','A'). テーブルデータ(780,'20120521','20120602','A'). テーブルデータ(781,'20120521','20120601','A'). テーブルデータ(782,'20120521','20120530','A'). テーブルデータ(783,'20120521','20120719','A'). テーブルデータ(784,'20120521','20120616','A'). テーブルデータ(785,'20120522','20120607','A'). テーブルデータ(786,'20120523','20120711','A'). テーブルデータ(787,'20120523','20120701','A'). テーブルデータ(788,'20120523','20120523','A'). テーブルデータ(789,'20120523','20120720','A'). テーブルデータ(790,'20120523','20120621','A'). テーブルデータ(791,'20120524','20120704','A'). テーブルデータ(792,'20120524','20120627','A'). テーブルデータ(793,'20120524','20120611','A'). テーブルデータ(794,'20120524','20120622','A'). テーブルデータ(795,'20120525','20120601','A'). テーブルデータ(796,'20120525','20120711','A'). テーブルデータ(797,'20120525','20120707','A'). テーブルデータ(798,'20120525','20120601','A'). テーブルデータ(799,'20120525','20120605','A'). テーブルデータ(800,'20120525','20120626','A'). テーブルデータ(801,'20120525','20120527','A'). テーブルデータ(802,'20120526','20120610','A'). テーブルデータ(803,'20120526','20120625','A'). テーブルデータ(804,'20120527','20120716','A'). テーブルデータ(805,'20120527','20120630','A'). テーブルデータ(806,'20120527','20120626','A'). テーブルデータ(807,'20120527','20120717','A'). テーブルデータ(808,'20120527','20120629','A'). テーブルデータ(809,'20120527','20120723','A'). テーブルデータ(810,'20120527','20120610','A'). テーブルデータ(811,'20120527','20120707','A'). テーブルデータ(812,'20120527','20120528','A'). テーブルデータ(813,'20120527','20120530','A'). テーブルデータ(814,'20120527','20120616','A'). テーブルデータ(815,'20120527','20120719','A'). テーブルデータ(816,'20120527','20120529','A'). テーブルデータ(817,'20120527','20120707','A'). テーブルデータ(818,'20120527','20120623','A'). テーブルデータ(819,'20120527','20120701','A'). テーブルデータ(820,'20120527','20120612','A'). テーブルデータ(821,'20120527','20120711','A'). テーブルデータ(822,'20120527','20120531','A'). テーブルデータ(823,'20120527','20120618','A'). テーブルデータ(824,'20120528','20120718','A'). テーブルデータ(825,'20120528','20120724','A'). テーブルデータ(826,'20120528','20120719','A'). テーブルデータ(827,'20120528','20120721','A'). テーブルデータ(828,'20120528','20120618','A'). テーブルデータ(829,'20120528','20120713','A'). テーブルデータ(830,'20120528','20120722','A'). テーブルデータ(831,'20120528','20120704','A'). テーブルデータ(832,'20120528','20120605','A'). テーブルデータ(833,'20120528','20120612','A'). テーブルデータ(834,'20120528','20120616','A'). テーブルデータ(835,'20120528','20120709','A'). テーブルデータ(836,'20120528','20120704','A'). テーブルデータ(837,'20120528','20120531','A'). テーブルデータ(838,'20120528','20120613','A'). テーブルデータ(839,'20120528','20120701','A'). テーブルデータ(840,'20120528','20120614','A'). テーブルデータ(841,'20120528','20120716','A'). テーブルデータ(842,'20120528','20120624','A'). テーブルデータ(843,'20120528','20120609','A'). テーブルデータ(844,'20120528','20120530','A'). テーブルデータ(845,'20120528','20120618','A'). テーブルデータ(846,'20120528','20120603','A'). テーブルデータ(847,'20120529','20120708','A'). テーブルデータ(848,'20120529','20120710','A'). テーブルデータ(849,'20120529','20120719','A'). テーブルデータ(850,'20120529','20120623','A'). テーブルデータ(851,'20120529','20120714','A'). テーブルデータ(852,'20120529','20120603','A'). テーブルデータ(853,'20120529','20120608','A'). テーブルデータ(854,'20120529','20120628','A'). テーブルデータ(855,'20120529','20120601','A'). テーブルデータ(856,'20120529','20120722','A'). テーブルデータ(857,'20120529','20120614','A'). テーブルデータ(858,'20120529','20120614','A'). テーブルデータ(859,'20120529','20120708','A'). テーブルデータ(860,'20120529','20120610','A'). テーブルデータ(861,'20120530','20120717','A'). テーブルデータ(862,'20120530','20120618','A'). テーブルデータ(863,'20120530','20120604','A'). テーブルデータ(864,'20120530','20120629','A'). テーブルデータ(865,'20120530','20120725','A'). テーブルデータ(866,'20120530','20120530','A'). テーブルデータ(867,'20120530','20120707','A'). テーブルデータ(868,'20120530','20120622','A'). テーブルデータ(869,'20120530','20120616','A'). テーブルデータ(870,'20120530','20120627','A'). テーブルデータ(871,'20120530','20120711','A'). テーブルデータ(872,'20120530','20120620','A'). テーブルデータ(873,'20120530','20120629','A'). テーブルデータ(874,'20120530','20120724','A'). テーブルデータ(875,'20120530','20120627','A'). テーブルデータ(876,'20120530','20120604','A'). テーブルデータ(877,'20120531','20120610','A'). テーブルデータ(878,'20120531','20120727','A'). テーブルデータ(879,'20120531','20120723','A'). テーブルデータ(880,'20120531','20120718','A'). テーブルデータ(881,'20120531','20120602','A'). テーブルデータ(882,'20120531','20120603','A'). テーブルデータ(883,'20120601','20120728','A'). テーブルデータ(884,'20120601','20120728','A'). テーブルデータ(885,'20120601','20120628','A'). テーブルデータ(886,'20120601','20120607','A'). テーブルデータ(887,'20120601','20120630','A'). テーブルデータ(888,'20120601','20120702','A'). テーブルデータ(889,'20120601','20120722','A'). テーブルデータ(890,'20120601','20120610','A'). テーブルデータ(891,'20120601','20120721','A'). テーブルデータ(892,'20120601','20120719','A'). テーブルデータ(893,'20120601','20120710','A'). テーブルデータ(894,'20120602','20120720','A'). テーブルデータ(895,'20120602','20120612','A'). テーブルデータ(896,'20120602','20120725','A'). テーブルデータ(897,'20120602','20120729','A'). テーブルデータ(898,'20120602','20120702','A'). テーブルデータ(899,'20120602','20120708','A'). テーブルデータ(900,'20120602','20120621','A'). テーブルデータ(901,'20120602','20120724','A'). テーブルデータ(902,'20120602','20120703','A'). テーブルデータ(903,'20120603','20120730','A'). テーブルデータ(904,'20120603','20120801','A'). テーブルデータ(905,'20120603','20120730','A'). テーブルデータ(906,'20120603','20120719','A'). テーブルデータ(907,'20120603','20120725','A'). テーブルデータ(908,'20120603','20120710','A'). テーブルデータ(909,'20120603','20120714','A'). テーブルデータ(910,'20120603','20120728','A'). テーブルデータ(911,'20120603','20120721','A'). テーブルデータ(912,'20120603','20120711','A'). テーブルデータ(913,'20120603','20120717','A'). テーブルデータ(914,'20120603','20120618','A'). テーブルデータ(915,'20120603','20120709','A'). テーブルデータ(916,'20120603','20120608','A'). テーブルデータ(917,'20120603','20120719','A'). テーブルデータ(918,'20120603','20120701','A'). テーブルデータ(919,'20120603','20120617','A'). テーブルデータ(920,'20120603','20120701','A'). テーブルデータ(921,'20120604','20120727','A'). テーブルデータ(922,'20120604','20120801','A'). テーブルデータ(923,'20120604','20120731','A'). テーブルデータ(924,'20120604','20120729','A'). テーブルデータ(925,'20120604','20120726','A'). テーブルデータ(926,'20120604','20120728','A'). テーブルデータ(927,'20120604','20120629','A'). テーブルデータ(928,'20120604','20120624','A'). テーブルデータ(929,'20120604','20120609','A'). テーブルデータ(930,'20120605','20120718','A'). テーブルデータ(931,'20120605','20120727','A'). テーブルデータ(932,'20120605','20120612','A'). テーブルデータ(933,'20120605','20120717','A'). テーブルデータ(934,'20120605','20120716','A'). テーブルデータ(935,'20120605','20120728','A'). テーブルデータ(936,'20120605','20120709','A'). テーブルデータ(937,'20120605','20120624','A'). テーブルデータ(938,'20120605','20120709','A'). テーブルデータ(939,'20120605','20120626','A'). テーブルデータ(940,'20120605','20120803','A'). テーブルデータ(941,'20120605','20120610','A'). テーブルデータ(942,'20120605','20120801','A'). テーブルデータ(943,'20120605','20120619','A'). テーブルデータ(944,'20120605','20120716','A'). テーブルデータ(945,'20120605','20120607','A'). テーブルデータ(946,'20120605','20120727','A'). テーブルデータ(947,'20120605','20120606','A'). テーブルデータ(948,'20120606','20120618','A'). テーブルデータ(949,'20120606','20120616','A'). テーブルデータ(950,'20120606','20120608','A'). テーブルデータ(951,'20120606','20120608','A'). テーブルデータ(952,'20120606','20120804','A'). テーブルデータ(953,'20120606','20120802','A'). テーブルデータ(954,'20120606','20120730','A'). テーブルデータ(955,'20120606','20120729','A'). テーブルデータ(956,'20120606','20120621','A'). テーブルデータ(957,'20120606','20120612','A'). テーブルデータ(958,'20120606','20120727','A'). テーブルデータ(959,'20120606','20120630','A'). テーブルデータ(960,'20120606','20120726','A'). テーブルデータ(961,'20120606','20120719','A'). テーブルデータ(962,'20120606','20120707','A'). テーブルデータ(963,'20120606','20120708','A'). テーブルデータ(964,'20120606','20120623','A'). テーブルデータ(965,'20120607','20120805','A'). テーブルデータ(966,'20120607','20120705','A'). テーブルデータ(967,'20120607','20120728','A'). テーブルデータ(968,'20120607','20120627','A'). テーブルデータ(969,'20120607','20120704','A'). テーブルデータ(970,'20120607','20120802','A'). テーブルデータ(971,'20120607','20120617','A'). テーブルデータ(972,'20120607','20120718','A'). テーブルデータ(973,'20120607','20120707','A'). テーブルデータ(974,'20120607','20120619','A'). テーブルデータ(975,'20120607','20120702','A'). テーブルデータ(976,'20120607','20120708','A'). テーブルデータ(977,'20120607','20120706','A'). テーブルデータ(978,'20120607','20120714','A'). テーブルデータ(979,'20120607','20120718','A'). テーブルデータ(980,'20120607','20120630','A'). テーブルデータ(981,'20120607','20120708','A'). テーブルデータ(982,'20120607','20120709','A'). テーブルデータ(983,'20120608','20120704','A'). テーブルデータ(984,'20120608','20120626','A'). テーブルデータ(985,'20120608','20120705','A'). テーブルデータ(986,'20120608','20120702','A'). テーブルデータ(987,'20120608','20120617','A'). テーブルデータ(988,'20120608','20120730','A'). テーブルデータ(989,'20120608','20120622','A'). テーブルデータ(990,'20120608','20120722','A'). テーブルデータ(991,'20120608','20120623','A'). テーブルデータ(992,'20120608','20120717','A'). テーブルデータ(993,'20120608','20120609','A'). テーブルデータ(994,'20120608','20120710','A'). テーブルデータ(995,'20120608','20120716','A'). テーブルデータ(996,'20120608','20120707','A'). テーブルデータ(997,'20120608','20120624','A'). テーブルデータ(998,'20120608','20120728','A'). テーブルデータ(999,'20120608','20120803','A'). テーブルデータ(1000,'20120608','20120612','A'). テーブルデータ(1001,'20120608','20120608','A'). テーブルデータ(1002,'20120608','20120707','A'). テーブルデータ(1003,'20120608','20120712','A'). テーブルデータ(1004,'20120609','20120802','A'). テーブルデータ(1005,'20120609','20120615','A'). テーブルデータ(1006,'20120609','20120705','A'). テーブルデータ(1007,'20120609','20120702','A'). テーブルデータ(1008,'20120609','20120718','A'). テーブルデータ(1009,'20120609','20120728','A'). テーブルデータ(1010,'20120610','20120622','A'). テーブルデータ(1011,'20120610','20120611','A'). テーブルデータ(1012,'20120610','20120623','A'). テーブルデータ(1013,'20120610','20120710','A'). テーブルデータ(1014,'20120610','20120709','A'). テーブルデータ(1015,'20120610','20120709','A'). テーブルデータ(1016,'20120610','20120711','A'). テーブルデータ(1017,'20120610','20120623','A'). テーブルデータ(1018,'20120610','20120724','A'). テーブルデータ(1019,'20120610','20120625','A'). テーブルデータ(1020,'20120610','20120708','A'). テーブルデータ(1021,'20120610','20120625','A'). テーブルデータ(1022,'20120610','20120627','A'). テーブルデータ(1023,'20120610','20120802','A'). テーブルデータ(1024,'20120610','20120802','A'). テーブルデータ(1025,'20120610','20120718','A'). テーブルデータ(1026,'20120610','20120619','A'). テーブルデータ(1027,'20120610','20120715','A'). テーブルデータ(1028,'20120610','20120715','A'). テーブルデータ(1029,'20120610','20120623','A'). テーブルデータ(1030,'20120610','20120708','A'). テーブルデータ(1031,'20120610','20120805','A'). テーブルデータ(1032,'20120610','20120720','A'). テーブルデータ(1033,'20120610','20120713','A'). テーブルデータ(1034,'20120610','20120723','A'). テーブルデータ(1035,'20120610','20120726','A'). テーブルデータ(1036,'20120611','20120808','A'). テーブルデータ(1037,'20120611','20120628','A'). テーブルデータ(1038,'20120611','20120721','A'). テーブルデータ(1039,'20120611','20120726','A'). テーブルデータ(1040,'20120611','20120702','A'). テーブルデータ(1041,'20120611','20120722','A'). テーブルデータ(1042,'20120611','20120731','A'). テーブルデータ(1043,'20120611','20120724','A'). テーブルデータ(1044,'20120611','20120621','A'). テーブルデータ(1045,'20120611','20120701','A'). テーブルデータ(1046,'20120611','20120625','A'). テーブルデータ(1047,'20120611','20120626','A'). テーブルデータ(1048,'20120611','20120615','A'). テーブルデータ(1049,'20120611','20120703','A'). テーブルデータ(1050,'20120611','20120725','A'). テーブルデータ(1051,'20120611','20120630','A'). テーブルデータ(1052,'20120611','20120720','A'). テーブルデータ(1053,'20120611','20120710','A'). テーブルデータ(1054,'20120611','20120615','A'). テーブルデータ(1055,'20120611','20120620','A'). テーブルデータ(1056,'20120611','20120719','A'). テーブルデータ(1057,'20120611','20120712','A'). テーブルデータ(1058,'20120612','20120725','A'). テーブルデータ(1059,'20120612','20120810','A'). テーブルデータ(1060,'20120612','20120715','A'). テーブルデータ(1061,'20120612','20120705','A'). テーブルデータ(1062,'20120612','20120706','A'). テーブルデータ(1063,'20120612','20120628','A'). テーブルデータ(1064,'20120612','20120613','A'). テーブルデータ(1065,'20120613','20120619','A'). テーブルデータ(1066,'20120613','20120624','A'). テーブルデータ(1067,'20120613','20120730','A'). テーブルデータ(1068,'20120613','20120804','A'). テーブルデータ(1069,'20120613','20120715','A'). テーブルデータ(1070,'20120613','20120712','A'). テーブルデータ(1071,'20120613','20120725','A'). テーブルデータ(1072,'20120613','20120621','A'). テーブルデータ(1073,'20120613','20120714','A'). テーブルデータ(1074,'20120613','20120615','A'). テーブルデータ(1075,'20120613','20120627','A'). テーブルデータ(1076,'20120613','20120730','A'). テーブルデータ(1077,'20120613','20120810','A'). テーブルデータ(1078,'20120613','20120719','A'). テーブルデータ(1079,'20120613','20120706','A'). テーブルデータ(1080,'20120613','20120630','A'). テーブルデータ(1081,'20120614','20120805','A'). テーブルデータ(1082,'20120614','20120627','A'). テーブルデータ(1083,'20120614','20120701','A'). テーブルデータ(1084,'20120614','20120706','A'). テーブルデータ(1085,'20120614','20120729','A'). テーブルデータ(1086,'20120614','20120806','A'). テーブルデータ(1087,'20120614','20120810','A'). テーブルデータ(1088,'20120614','20120720','A'). テーブルデータ(1089,'20120615','20120706','A'). テーブルデータ(1090,'20120615','20120807','A'). テーブルデータ(1091,'20120615','20120711','A'). テーブルデータ(1092,'20120615','20120629','A'). テーブルデータ(1093,'20120615','20120615','A'). テーブルデータ(1094,'20120615','20120718','A'). テーブルデータ(1095,'20120615','20120710','A'). テーブルデータ(1096,'20120615','20120802','A'). テーブルデータ(1097,'20120615','20120710','A'). テーブルデータ(1098,'20120615','20120804','A'). テーブルデータ(1099,'20120615','20120624','A'). テーブルデータ(1100,'20120615','20120813','A'). テーブルデータ(1101,'20120615','20120812','A'). テーブルデータ(1102,'20120615','20120725','A'). テーブルデータ(1103,'20120615','20120617','A'). テーブルデータ(1104,'20120615','20120619','A'). テーブルデータ(1105,'20120615','20120704','A'). テーブルデータ(1106,'20120615','20120615','A'). テーブルデータ(1107,'20120615','20120726','A'). テーブルデータ(1108,'20120616','20120626','A'). テーブルデータ(1109,'20120616','20120726','A'). テーブルデータ(1110,'20120616','20120712','A'). テーブルデータ(1111,'20120616','20120709','A'). テーブルデータ(1112,'20120616','20120804','A'). テーブルデータ(1113,'20120616','20120726','A'). テーブルデータ(1114,'20120616','20120624','A'). テーブルデータ(1115,'20120616','20120729','A'). テーブルデータ(1116,'20120616','20120724','A'). テーブルデータ(1117,'20120616','20120723','A'). テーブルデータ(1118,'20120616','20120808','A'). テーブルデータ(1119,'20120616','20120806','A'). テーブルデータ(1120,'20120616','20120716','A'). テーブルデータ(1121,'20120617','20120622','A'). テーブルデータ(1122,'20120617','20120717','A'). テーブルデータ(1123,'20120617','20120809','A'). テーブルデータ(1124,'20120617','20120718','A'). テーブルデータ(1125,'20120617','20120705','A'). テーブルデータ(1126,'20120617','20120627','A'). テーブルデータ(1127,'20120617','20120708','A'). テーブルデータ(1128,'20120617','20120714','A'). テーブルデータ(1129,'20120617','20120626','A'). テーブルデータ(1130,'20120617','20120628','A'). テーブルデータ(1131,'20120617','20120617','A'). テーブルデータ(1132,'20120617','20120620','A'). テーブルデータ(1133,'20120617','20120702','A'). テーブルデータ(1134,'20120617','20120706','A'). テーブルデータ(1135,'20120617','20120621','A'). テーブルデータ(1136,'20120617','20120804','A'). テーブルデータ(1137,'20120617','20120810','A'). テーブルデータ(1138,'20120617','20120623','A'). テーブルデータ(1139,'20120617','20120716','A'). テーブルデータ(1140,'20120617','20120629','A'). テーブルデータ(1141,'20120617','20120716','A'). テーブルデータ(1142,'20120618','20120810','A'). テーブルデータ(1143,'20120618','20120718','A'). テーブルデータ(1144,'20120618','20120810','A'). テーブルデータ(1145,'20120618','20120711','A'). テーブルデータ(1146,'20120618','20120625','A'). テーブルデータ(1147,'20120618','20120727','A'). テーブルデータ(1148,'20120618','20120702','A'). テーブルデータ(1149,'20120618','20120717','A'). テーブルデータ(1150,'20120618','20120816','A'). テーブルデータ(1151,'20120618','20120629','A'). テーブルデータ(1152,'20120618','20120816','A'). テーブルデータ(1153,'20120619','20120731','A'). テーブルデータ(1154,'20120619','20120629','A'). テーブルデータ(1155,'20120619','20120804','A'). テーブルデータ(1156,'20120619','20120813','A'). テーブルデータ(1157,'20120619','20120718','A'). テーブルデータ(1158,'20120619','20120813','A'). テーブルデータ(1159,'20120619','20120625','A'). テーブルデータ(1160,'20120619','20120710','A'). テーブルデータ(1161,'20120619','20120809','A'). テーブルデータ(1162,'20120619','20120703','A'). テーブルデータ(1163,'20120619','20120722','A'). テーブルデータ(1164,'20120619','20120805','A'). テーブルデータ(1165,'20120619','20120621','A'). テーブルデータ(1166,'20120619','20120716','A'). テーブルデータ(1167,'20120619','20120811','A'). テーブルデータ(1168,'20120620','20120729','A'). テーブルデータ(1169,'20120620','20120712','A'). テーブルデータ(1170,'20120620','20120724','A'). テーブルデータ(1171,'20120620','20120714','A'). テーブルデータ(1172,'20120620','20120803','A'). テーブルデータ(1173,'20120620','20120709','A'). テーブルデータ(1174,'20120620','20120729','A'). テーブルデータ(1175,'20120620','20120802','A'). テーブルデータ(1176,'20120620','20120817','A'). テーブルデータ(1177,'20120620','20120812','A'). テーブルデータ(1178,'20120620','20120702','A'). テーブルデータ(1179,'20120620','20120808','A'). テーブルデータ(1180,'20120620','20120625','A'). テーブルデータ(1181,'20120620','20120624','A'). テーブルデータ(1182,'20120620','20120723','A'). テーブルデータ(1183,'20120620','20120729','A'). テーブルデータ(1184,'20120620','20120704','A'). テーブルデータ(1185,'20120620','20120709','A'). テーブルデータ(1186,'20120620','20120725','A'). テーブルデータ(1187,'20120620','20120725','A'). テーブルデータ(1188,'20120620','20120627','A'). テーブルデータ(1189,'20120620','20120723','A'). テーブルデータ(1190,'20120620','20120808','A'). テーブルデータ(1191,'20120620','20120809','A'). テーブルデータ(1192,'20120621','20120713','A'). テーブルデータ(1193,'20120621','20120728','A'). テーブルデータ(1194,'20120621','20120802','A'). テーブルデータ(1195,'20120621','20120809','A'). テーブルデータ(1196,'20120621','20120721','A'). テーブルデータ(1197,'20120621','20120626','A'). テーブルデータ(1198,'20120621','20120711','A'). テーブルデータ(1199,'20120621','20120804','A'). テーブルデータ(1200,'20120621','20120722','A'). テーブルデータ(1201,'20120621','20120728','A'). テーブルデータ(1202,'20120621','20120720','A'). テーブルデータ(1203,'20120621','20120803','A'). テーブルデータ(1204,'20120621','20120707','A'). テーブルデータ(1205,'20120621','20120703','A'). テーブルデータ(1206,'20120621','20120801','A'). テーブルデータ(1207,'20120621','20120623','A'). テーブルデータ(1208,'20120621','20120716','A'). テーブルデータ(1209,'20120621','20120714','A'). テーブルデータ(1210,'20120622','20120713','A'). テーブルデータ(1211,'20120622','20120809','A'). テーブルデータ(1212,'20120622','20120730','A'). テーブルデータ(1213,'20120622','20120719','A'). テーブルデータ(1214,'20120622','20120622','A'). テーブルデータ(1215,'20120622','20120627','A'). テーブルデータ(1216,'20120622','20120624','A'). テーブルデータ(1217,'20120622','20120629','A'). テーブルデータ(1218,'20120622','20120731','A'). テーブルデータ(1219,'20120622','20120812','A'). テーブルデータ(1220,'20120622','20120810','A'). テーブルデータ(1221,'20120622','20120718','A'). テーブルデータ(1222,'20120622','20120705','A'). テーブルデータ(1223,'20120622','20120718','A'). テーブルデータ(1224,'20120622','20120630','A'). テーブルデータ(1225,'20120622','20120815','A'). テーブルデータ(1226,'20120622','20120817','A'). テーブルデータ(1227,'20120622','20120628','A'). テーブルデータ(1228,'20120622','20120629','A'). テーブルデータ(1229,'20120622','20120724','A'). テーブルデータ(1230,'20120622','20120729','A'). テーブルデータ(1231,'20120622','20120805','A'). テーブルデータ(1232,'20120622','20120623','A'). テーブルデータ(1233,'20120622','20120712','A'). テーブルデータ(1234,'20120622','20120622','A'). テーブルデータ(1235,'20120622','20120628','A'). テーブルデータ(1236,'20120622','20120815','A'). テーブルデータ(1237,'20120622','20120815','A'). テーブルデータ(1238,'20120622','20120715','A'). テーブルデータ(1239,'20120622','20120709','A'). テーブルデータ(1240,'20120623','20120806','A'). テーブルデータ(1241,'20120623','20120819','A'). テーブルデータ(1242,'20120623','20120725','A'). テーブルデータ(1243,'20120623','20120704','A'). テーブルデータ(1244,'20120623','20120819','A'). テーブルデータ(1245,'20120623','20120722','A'). テーブルデータ(1246,'20120623','20120628','A'). テーブルデータ(1247,'20120623','20120818','A'). テーブルデータ(1248,'20120623','20120701','A'). テーブルデータ(1249,'20120623','20120811','A'). テーブルデータ(1250,'20120623','20120807','A'). テーブルデータ(1251,'20120623','20120728','A'). テーブルデータ(1252,'20120623','20120625','A'). テーブルデータ(1253,'20120623','20120704','A'). テーブルデータ(1254,'20120623','20120728','A'). テーブルデータ(1255,'20120623','20120811','A'). テーブルデータ(1256,'20120623','20120821','A'). テーブルデータ(1257,'20120623','20120803','A'). テーブルデータ(1258,'20120623','20120818','A'). テーブルデータ(1259,'20120623','20120725','A'). テーブルデータ(1260,'20120623','20120704','A'). テーブルデータ(1261,'20120623','20120802','A'). テーブルデータ(1262,'20120623','20120718','A'). テーブルデータ(1263,'20120623','20120716','A'). テーブルデータ(1264,'20120624','20120725','A'). テーブルデータ(1265,'20120624','20120703','A'). テーブルデータ(1266,'20120624','20120721','A'). テーブルデータ(1267,'20120625','20120713','A'). テーブルデータ(1268,'20120625','20120707','A'). テーブルデータ(1269,'20120625','20120725','A'). テーブルデータ(1270,'20120625','20120711','A'). テーブルデータ(1271,'20120625','20120808','A'). テーブルデータ(1272,'20120625','20120728','A'). テーブルデータ(1273,'20120625','20120708','A'). テーブルデータ(1274,'20120625','20120701','A'). テーブルデータ(1275,'20120625','20120803','A'). テーブルデータ(1276,'20120625','20120705','A'). テーブルデータ(1277,'20120625','20120709','A'). テーブルデータ(1278,'20120625','20120723','A'). テーブルデータ(1279,'20120625','20120819','A'). テーブルデータ(1280,'20120625','20120805','A'). テーブルデータ(1281,'20120625','20120717','A'). テーブルデータ(1282,'20120625','20120823','A'). テーブルデータ(1283,'20120625','20120712','A'). テーブルデータ(1284,'20120626','20120823','A'). テーブルデータ(1285,'20120626','20120815','A'). テーブルデータ(1286,'20120626','20120824','A'). テーブルデータ(1287,'20120626','20120718','A'). テーブルデータ(1288,'20120627','20120728','A'). テーブルデータ(1289,'20120627','20120814','A'). テーブルデータ(1290,'20120627','20120714','A'). テーブルデータ(1291,'20120627','20120701','A'). テーブルデータ(1292,'20120627','20120708','A'). テーブルデータ(1293,'20120627','20120723','A'). テーブルデータ(1294,'20120627','20120720','A'). テーブルデータ(1295,'20120627','20120824','A'). テーブルデータ(1296,'20120627','20120811','A'). テーブルデータ(1297,'20120627','20120801','A'). テーブルデータ(1298,'20120627','20120717','A'). テーブルデータ(1299,'20120627','20120628','A'). テーブルデータ(1300,'20120627','20120709','A'). テーブルデータ(1301,'20120627','20120812','A'). テーブルデータ(1302,'20120627','20120711','A'). テーブルデータ(1303,'20120627','20120715','A'). テーブルデータ(1304,'20120627','20120722','A'). テーブルデータ(1305,'20120627','20120713','A'). テーブルデータ(1306,'20120627','20120729','A'). テーブルデータ(1307,'20120627','20120811','A'). テーブルデータ(1308,'20120627','20120709','A'). テーブルデータ(1309,'20120627','20120703','A'). テーブルデータ(1310,'20120627','20120825','A'). テーブルデータ(1311,'20120627','20120708','A'). テーブルデータ(1312,'20120628','20120701','A'). テーブルデータ(1313,'20120628','20120629','A'). テーブルデータ(1314,'20120628','20120703','A'). テーブルデータ(1315,'20120628','20120630','A'). テーブルデータ(1316,'20120628','20120714','A'). テーブルデータ(1317,'20120628','20120826','A'). テーブルデータ(1318,'20120628','20120801','A'). テーブルデータ(1319,'20120628','20120702','A'). テーブルデータ(1320,'20120628','20120714','A'). テーブルデータ(1321,'20120628','20120728','A'). テーブルデータ(1322,'20120628','20120705','A'). テーブルデータ(1323,'20120628','20120801','A'). テーブルデータ(1324,'20120628','20120820','A'). テーブルデータ(1325,'20120628','20120824','A'). テーブルデータ(1326,'20120628','20120717','A'). テーブルデータ(1327,'20120628','20120718','A'). テーブルデータ(1328,'20120628','20120708','A'). テーブルデータ(1329,'20120628','20120710','A'). テーブルデータ(1330,'20120628','20120730','A'). テーブルデータ(1331,'20120628','20120823','A'). テーブルデータ(1332,'20120628','20120717','A'). テーブルデータ(1333,'20120628','20120817','A'). テーブルデータ(1334,'20120628','20120711','A'). テーブルデータ(1335,'20120628','20120802','A'). テーブルデータ(1336,'20120629','20120826','A'). テーブルデータ(1337,'20120629','20120815','A'). テーブルデータ(1338,'20120629','20120720','A'). テーブルデータ(1339,'20120629','20120825','A'). テーブルデータ(1340,'20120629','20120818','A'). テーブルデータ(1341,'20120629','20120804','A'). テーブルデータ(1342,'20120629','20120629','A'). テーブルデータ(1343,'20120629','20120812','A'). テーブルデータ(1344,'20120629','20120809','A'). テーブルデータ(1345,'20120629','20120702','A'). テーブルデータ(1346,'20120629','20120629','A'). テーブルデータ(1347,'20120629','20120731','A'). テーブルデータ(1348,'20120629','20120728','A'). テーブルデータ(1349,'20120629','20120824','A'). テーブルデータ(1350,'20120629','20120808','A'). テーブルデータ(1351,'20120629','20120827','A'). テーブルデータ(1352,'20120630','20120715','A'). テーブルデータ(1353,'20120630','20120813','A'). テーブルデータ(1354,'20120630','20120822','A'). テーブルデータ(1355,'20120630','20120726','A'). テーブルデータ(1356,'20120701','20120704','A'). テーブルデータ(1357,'20120701','20120801','A'). テーブルデータ(1358,'20120701','20120730','A'). テーブルデータ(1359,'20120701','20120821','A'). テーブルデータ(1360,'20120701','20120820','A'). テーブルデータ(1361,'20120702','20120706','A'). テーブルデータ(1362,'20120702','20120727','A'). テーブルデータ(1363,'20120702','20120728','A'). テーブルデータ(1364,'20120702','20120704','A'). テーブルデータ(1365,'20120702','20120707','A'). テーブルデータ(1366,'20120702','20120810','A'). テーブルデータ(1367,'20120702','20120822','A'). テーブルデータ(1368,'20120702','20120818','A'). テーブルデータ(1369,'20120702','20120709','A'). テーブルデータ(1370,'20120702','20120815','A'). テーブルデータ(1371,'20120702','20120802','A'). テーブルデータ(1372,'20120702','20120812','A'). テーブルデータ(1373,'20120702','20120810','A'). テーブルデータ(1374,'20120702','20120802','A'). テーブルデータ(1375,'20120702','20120715','A'). テーブルデータ(1376,'20120702','20120710','A'). テーブルデータ(1377,'20120702','20120729','A'). テーブルデータ(1378,'20120702','20120825','A'). テーブルデータ(1379,'20120702','20120830','A'). テーブルデータ(1380,'20120702','20120725','A'). テーブルデータ(1381,'20120703','20120815','A'). テーブルデータ(1382,'20120703','20120711','A'). テーブルデータ(1383,'20120704','20120812','A'). テーブルデータ(1384,'20120704','20120707','A'). テーブルデータ(1385,'20120704','20120831','A'). テーブルデータ(1386,'20120704','20120712','A'). テーブルデータ(1387,'20120704','20120827','A'). テーブルデータ(1388,'20120704','20120813','A'). テーブルデータ(1389,'20120704','20120724','A'). テーブルデータ(1390,'20120704','20120831','A'). テーブルデータ(1391,'20120704','20120710','A'). テーブルデータ(1392,'20120704','20120811','A'). テーブルデータ(1393,'20120704','20120825','A'). テーブルデータ(1394,'20120704','20120707','A'). テーブルデータ(1395,'20120704','20120722','A'). テーブルデータ(1396,'20120704','20120808','A'). テーブルデータ(1397,'20120704','20120823','A'). テーブルデータ(1398,'20120704','20120729','A'). テーブルデータ(1399,'20120704','20120723','A'). テーブルデータ(1400,'20120704','20120726','A'). テーブルデータ(1401,'20120704','20120710','A'). テーブルデータ(1402,'20120704','20120831','A'). テーブルデータ(1403,'20120704','20120818','A'). テーブルデータ(1404,'20120704','20120716','A'). テーブルデータ(1405,'20120704','20120831','A'). テーブルデータ(1406,'20120704','20120717','A'). テーブルデータ(1407,'20120704','20120710','A'). テーブルデータ(1408,'20120704','20120830','A'). テーブルデータ(1409,'20120704','20120801','A'). テーブルデータ(1410,'20120704','20120711','A'). テーブルデータ(1411,'20120705','20120810','A'). テーブルデータ(1412,'20120705','20120731','A'). テーブルデータ(1413,'20120705','20120717','A'). テーブルデータ(1414,'20120706','20120723','A'). テーブルデータ(1415,'20120706','20120726','A'). テーブルデータ(1416,'20120706','20120808','A'). テーブルデータ(1417,'20120706','20120901','A'). テーブルデータ(1418,'20120706','20120807','A'). テーブルデータ(1419,'20120706','20120729','A'). テーブルデータ(1420,'20120706','20120830','A'). テーブルデータ(1421,'20120706','20120717','A'). テーブルデータ(1422,'20120706','20120713','A'). テーブルデータ(1423,'20120706','20120902','A'). テーブルデータ(1424,'20120707','20120810','A'). テーブルデータ(1425,'20120707','20120817','A'). テーブルデータ(1426,'20120707','20120822','A'). テーブルデータ(1427,'20120707','20120830','A'). テーブルデータ(1428,'20120707','20120710','A'). テーブルデータ(1429,'20120707','20120821','A'). テーブルデータ(1430,'20120707','20120820','A'). テーブルデータ(1431,'20120707','20120824','A'). テーブルデータ(1432,'20120707','20120902','A'). テーブルデータ(1433,'20120707','20120819','A'). テーブルデータ(1434,'20120707','20120829','A'). テーブルデータ(1435,'20120707','20120831','A'). テーブルデータ(1436,'20120707','20120816','A'). テーブルデータ(1437,'20120707','20120728','A'). テーブルデータ(1438,'20120707','20120830','A'). テーブルデータ(1439,'20120707','20120712','A'). テーブルデータ(1440,'20120707','20120902','A'). テーブルデータ(1441,'20120707','20120727','A'). テーブルデータ(1442,'20120707','20120724','A'). テーブルデータ(1443,'20120707','20120804','A'). テーブルデータ(1444,'20120707','20120805','A'). テーブルデータ(1445,'20120707','20120805','A'). テーブルデータ(1446,'20120707','20120829','A'). テーブルデータ(1447,'20120707','20120726','A'). テーブルデータ(1448,'20120707','20120830','A'). テーブルデータ(1449,'20120707','20120723','A'). テーブルデータ(1450,'20120707','20120721','A'). テーブルデータ(1451,'20120707','20120712','A'). テーブルデータ(1452,'20120707','20120722','A'). テーブルデータ(1453,'20120707','20120712','A'). テーブルデータ(1454,'20120708','20120827','A'). テーブルデータ(1455,'20120708','20120823','A'). テーブルデータ(1456,'20120708','20120720','A'). テーブルデータ(1457,'20120708','20120813','A'). テーブルデータ(1458,'20120708','20120826','A'). テーブルデータ(1459,'20120708','20120826','A'). テーブルデータ(1460,'20120708','20120720','A'). テーブルデータ(1461,'20120708','20120806','A'). テーブルデータ(1462,'20120708','20120823','A'). テーブルデータ(1463,'20120708','20120901','A'). テーブルデータ(1464,'20120708','20120723','A'). テーブルデータ(1465,'20120708','20120810','A'). テーブルデータ(1466,'20120708','20120805','A'). テーブルデータ(1467,'20120708','20120813','A'). テーブルデータ(1468,'20120708','20120804','A'). テーブルデータ(1469,'20120708','20120810','A'). テーブルデータ(1470,'20120708','20120803','A'). テーブルデータ(1471,'20120708','20120817','A'). テーブルデータ(1472,'20120708','20120819','A'). テーブルデータ(1473,'20120708','20120823','A'). テーブルデータ(1474,'20120708','20120717','A'). テーブルデータ(1475,'20120708','20120711','A'). テーブルデータ(1476,'20120708','20120817','A'). テーブルデータ(1477,'20120708','20120805','A'). テーブルデータ(1478,'20120708','20120903','A'). テーブルデータ(1479,'20120708','20120902','A'). テーブルデータ(1480,'20120708','20120812','A'). テーブルデータ(1481,'20120709','20120713','A'). テーブルデータ(1482,'20120709','20120818','A'). テーブルデータ(1483,'20120709','20120729','A'). テーブルデータ(1484,'20120710','20120728','A'). テーブルデータ(1485,'20120710','20120804','A'). テーブルデータ(1486,'20120710','20120724','A'). テーブルデータ(1487,'20120710','20120907','A'). テーブルデータ(1488,'20120710','20120724','A'). テーブルデータ(1489,'20120710','20120805','A'). テーブルデータ(1490,'20120710','20120807','A'). テーブルデータ(1491,'20120710','20120901','A'). テーブルデータ(1492,'20120710','20120801','A'). テーブルデータ(1493,'20120710','20120822','A'). テーブルデータ(1494,'20120710','20120805','A'). テーブルデータ(1495,'20120710','20120821','A'). テーブルデータ(1496,'20120710','20120722','A'). テーブルデータ(1497,'20120710','20120902','A'). テーブルデータ(1498,'20120710','20120717','A'). テーブルデータ(1499,'20120710','20120809','A'). テーブルデータ(1500,'20120710','20120813','A'). テーブルデータ(1501,'20120711','20120727','A'). テーブルデータ(1502,'20120711','20120815','A'). テーブルデータ(1503,'20120711','20120824','A'). テーブルデータ(1504,'20120711','20120905','A'). テーブルデータ(1505,'20120711','20120715','A'). テーブルデータ(1506,'20120711','20120822','A'). テーブルデータ(1507,'20120711','20120825','A'). テーブルデータ(1508,'20120711','20120811','A'). テーブルデータ(1509,'20120711','20120816','A'). テーブルデータ(1510,'20120711','20120821','A'). テーブルデータ(1511,'20120711','20120714','A'). テーブルデータ(1512,'20120711','20120906','A'). テーブルデータ(1513,'20120711','20120807','A'). テーブルデータ(1514,'20120711','20120801','A'). テーブルデータ(1515,'20120711','20120802','A'). テーブルデータ(1516,'20120711','20120821','A'). テーブルデータ(1517,'20120711','20120731','A'). テーブルデータ(1518,'20120711','20120808','A'). テーブルデータ(1519,'20120711','20120908','A'). テーブルデータ(1520,'20120711','20120820','A'). テーブルデータ(1521,'20120712','20120725','A'). テーブルデータ(1522,'20120712','20120805','A'). テーブルデータ(1523,'20120712','20120829','A'). テーブルデータ(1524,'20120712','20120905','A'). テーブルデータ(1525,'20120712','20120809','A'). テーブルデータ(1526,'20120712','20120823','A'). テーブルデータ(1527,'20120712','20120714','A'). テーブルデータ(1528,'20120712','20120831','A'). テーブルデータ(1529,'20120712','20120728','A'). テーブルデータ(1530,'20120712','20120824','A'). テーブルデータ(1531,'20120712','20120718','A'). テーブルデータ(1532,'20120712','20120901','A'). テーブルデータ(1533,'20120712','20120801','A'). テーブルデータ(1534,'20120712','20120905','A'). テーブルデータ(1535,'20120712','20120828','A'). テーブルデータ(1536,'20120712','20120904','A'). テーブルデータ(1537,'20120712','20120813','A'). テーブルデータ(1538,'20120712','20120722','A'). テーブルデータ(1539,'20120712','20120811','A'). テーブルデータ(1540,'20120712','20120725','A'). テーブルデータ(1541,'20120712','20120725','A'). テーブルデータ(1542,'20120712','20120731','A'). テーブルデータ(1543,'20120713','20120816','A'). テーブルデータ(1544,'20120713','20120815','A'). テーブルデータ(1545,'20120713','20120726','A'). テーブルデータ(1546,'20120713','20120905','A'). テーブルデータ(1547,'20120713','20120715','A'). テーブルデータ(1548,'20120713','20120717','A'). テーブルデータ(1549,'20120713','20120817','A'). テーブルデータ(1550,'20120713','20120805','A'). テーブルデータ(1551,'20120713','20120731','A'). テーブルデータ(1552,'20120713','20120902','A'). テーブルデータ(1553,'20120713','20120724','A'). テーブルデータ(1554,'20120714','20120725','A'). テーブルデータ(1555,'20120714','20120828','A'). テーブルデータ(1556,'20120714','20120722','A'). テーブルデータ(1557,'20120714','20120715','A'). テーブルデータ(1558,'20120714','20120905','A'). テーブルデータ(1559,'20120714','20120826','A'). テーブルデータ(1560,'20120714','20120911','A'). テーブルデータ(1561,'20120714','20120820','A'). テーブルデータ(1562,'20120714','20120907','A'). テーブルデータ(1563,'20120714','20120906','A'). テーブルデータ(1564,'20120714','20120807','A'). テーブルデータ(1565,'20120714','20120901','A'). テーブルデータ(1566,'20120714','20120809','A'). テーブルデータ(1567,'20120714','20120810','A'). テーブルデータ(1568,'20120715','20120815','A'). テーブルデータ(1569,'20120715','20120824','A'). テーブルデータ(1570,'20120715','20120815','A'). テーブルデータ(1571,'20120715','20120718','A'). テーブルデータ(1572,'20120715','20120722','A'). テーブルデータ(1573,'20120715','20120910','A'). テーブルデータ(1574,'20120715','20120731','A'). テーブルデータ(1575,'20120715','20120906','A'). テーブルデータ(1576,'20120715','20120912','A'). テーブルデータ(1577,'20120715','20120805','A'). テーブルデータ(1578,'20120715','20120804','A'). テーブルデータ(1579,'20120715','20120729','A'). テーブルデータ(1580,'20120715','20120815','A'). テーブルデータ(1581,'20120716','20120803','A'). テーブルデータ(1582,'20120716','20120821','A'). テーブルデータ(1583,'20120716','20120730','A'). テーブルデータ(1584,'20120716','20120719','A'). テーブルデータ(1585,'20120716','20120829','A'). テーブルデータ(1586,'20120716','20120723','A'). テーブルデータ(1587,'20120716','20120911','A'). テーブルデータ(1588,'20120716','20120805','A'). テーブルデータ(1589,'20120716','20120723','A'). テーブルデータ(1590,'20120716','20120819','A'). テーブルデータ(1591,'20120716','20120731','A'). テーブルデータ(1592,'20120716','20120907','A'). テーブルデータ(1593,'20120717','20120912','A'). テーブルデータ(1594,'20120717','20120729','A'). テーブルデータ(1595,'20120717','20120726','A'). テーブルデータ(1596,'20120717','20120726','A'). テーブルデータ(1597,'20120717','20120829','A'). テーブルデータ(1598,'20120717','20120905','A'). テーブルデータ(1599,'20120717','20120818','A'). テーブルデータ(1600,'20120717','20120902','A'). テーブルデータ(1601,'20120717','20120904','A'). テーブルデータ(1602,'20120717','20120815','A'). テーブルデータ(1603,'20120717','20120910','A'). テーブルデータ(1604,'20120717','20120828','A'). テーブルデータ(1605,'20120717','20120806','A'). テーブルデータ(1606,'20120717','20120725','A'). テーブルデータ(1607,'20120717','20120720','A'). テーブルデータ(1608,'20120717','20120821','A'). テーブルデータ(1609,'20120717','20120825','A'). テーブルデータ(1610,'20120717','20120723','A'). テーブルデータ(1611,'20120717','20120831','A'). テーブルデータ(1612,'20120717','20120802','A'). テーブルデータ(1613,'20120717','20120730','A'). テーブルデータ(1614,'20120718','20120908','A'). テーブルデータ(1615,'20120718','20120807','A'). テーブルデータ(1616,'20120718','20120824','A'). テーブルデータ(1617,'20120718','20120722','A'). テーブルデータ(1618,'20120718','20120814','A'). テーブルデータ(1619,'20120718','20120721','A'). テーブルデータ(1620,'20120718','20120807','A'). テーブルデータ(1621,'20120718','20120808','A'). テーブルデータ(1622,'20120718','20120902','A'). テーブルデータ(1623,'20120718','20120804','A'). テーブルデータ(1624,'20120718','20120812','A'). テーブルデータ(1625,'20120719','20120806','A'). テーブルデータ(1626,'20120719','20120727','A'). テーブルデータ(1627,'20120719','20120817','A'). テーブルデータ(1628,'20120719','20120907','A'). テーブルデータ(1629,'20120719','20120904','A'). テーブルデータ(1630,'20120719','20120806','A'). テーブルデータ(1631,'20120719','20120808','A'). テーブルデータ(1632,'20120719','20120831','A'). テーブルデータ(1633,'20120719','20120720','A'). テーブルデータ(1634,'20120719','20120828','A'). テーブルデータ(1635,'20120719','20120831','A'). テーブルデータ(1636,'20120719','20120913','A'). テーブルデータ(1637,'20120719','20120726','A'). テーブルデータ(1638,'20120719','20120811','A'). テーブルデータ(1639,'20120719','20120721','A'). テーブルデータ(1640,'20120719','20120909','A'). テーブルデータ(1641,'20120719','20120819','A'). テーブルデータ(1642,'20120719','20120803','A'). テーブルデータ(1643,'20120720','20120812','A'). テーブルデータ(1644,'20120720','20120817','A'). テーブルデータ(1645,'20120720','20120722','A'). テーブルデータ(1646,'20120720','20120817','A'). テーブルデータ(1647,'20120721','20120917','A'). テーブルデータ(1648,'20120721','20120830','A'). テーブルデータ(1649,'20120721','20120729','A'). テーブルデータ(1650,'20120721','20120826','A'). テーブルデータ(1651,'20120721','20120908','A'). テーブルデータ(1652,'20120721','20120823','A'). テーブルデータ(1653,'20120721','20120813','A'). テーブルデータ(1654,'20120721','20120728','A'). テーブルデータ(1655,'20120721','20120824','A'). テーブルデータ(1656,'20120721','20120912','A'). テーブルデータ(1657,'20120721','20120916','A'). テーブルデータ(1658,'20120721','20120811','A'). テーブルデータ(1659,'20120721','20120724','A'). テーブルデータ(1660,'20120721','20120730','A'). テーブルデータ(1661,'20120721','20120915','A'). テーブルデータ(1662,'20120721','20120725','A'). テーブルデータ(1663,'20120721','20120901','A'). テーブルデータ(1664,'20120721','20120830','A'). テーブルデータ(1665,'20120721','20120911','A'). テーブルデータ(1666,'20120721','20120908','A'). テーブルデータ(1667,'20120721','20120914','A'). テーブルデータ(1668,'20120721','20120906','A'). テーブルデータ(1669,'20120721','20120824','A'). テーブルデータ(1670,'20120721','20120816','A'). テーブルデータ(1671,'20120721','20120913','A'). テーブルデータ(1672,'20120721','20120918','A'). テーブルデータ(1673,'20120722','20120813','A'). テーブルデータ(1674,'20120722','20120913','A'). テーブルデータ(1675,'20120722','20120723','A'). テーブルデータ(1676,'20120722','20120809','A'). テーブルデータ(1677,'20120722','20120911','A'). テーブルデータ(1678,'20120722','20120824','A'). テーブルデータ(1679,'20120722','20120809','A'). テーブルデータ(1680,'20120722','20120810','A'). テーブルデータ(1681,'20120722','20120813','A'). テーブルデータ(1682,'20120722','20120904','A'). テーブルデータ(1683,'20120722','20120826','A'). テーブルデータ(1684,'20120722','20120812','A'). テーブルデータ(1685,'20120723','20120812','A'). テーブルデータ(1686,'20120723','20120803','A'). テーブルデータ(1687,'20120723','20120815','A'). テーブルデータ(1688,'20120723','20120815','A'). テーブルデータ(1689,'20120723','20120812','A'). テーブルデータ(1690,'20120723','20120812','A'). テーブルデータ(1691,'20120723','20120812','A'). テーブルデータ(1692,'20120723','20120725','A'). テーブルデータ(1693,'20120723','20120913','A'). テーブルデータ(1694,'20120723','20120804','A'). テーブルデータ(1695,'20120723','20120905','A'). テーブルデータ(1696,'20120724','20120921','A'). テーブルデータ(1697,'20120724','20120811','A'). テーブルデータ(1698,'20120724','20120729','A'). テーブルデータ(1699,'20120724','20120916','A'). テーブルデータ(1700,'20120724','20120810','A'). テーブルデータ(1701,'20120724','20120831','A'). テーブルデータ(1702,'20120724','20120809','A'). テーブルデータ(1703,'20120724','20120803','A'). テーブルデータ(1704,'20120724','20120902','A'). テーブルデータ(1705,'20120724','20120819','A'). テーブルデータ(1706,'20120724','20120916','A'). テーブルデータ(1707,'20120724','20120806','A'). テーブルデータ(1708,'20120724','20120830','A'). テーブルデータ(1709,'20120724','20120729','A'). テーブルデータ(1710,'20120724','20120821','A'). テーブルデータ(1711,'20120724','20120814','A'). テーブルデータ(1712,'20120724','20120902','A'). テーブルデータ(1713,'20120724','20120911','A'). テーブルデータ(1714,'20120725','20120725','A'). テーブルデータ(1715,'20120725','20120915','A'). テーブルデータ(1716,'20120725','20120909','A'). テーブルデータ(1717,'20120725','20120818','A'). テーブルデータ(1718,'20120725','20120807','A'). テーブルデータ(1719,'20120725','20120921','A'). テーブルデータ(1720,'20120725','20120830','A'). テーブルデータ(1721,'20120725','20120801','A'). テーブルデータ(1722,'20120725','20120913','A'). テーブルデータ(1723,'20120725','20120911','A'). テーブルデータ(1724,'20120725','20120914','A'). テーブルデータ(1725,'20120725','20120823','A'). テーブルデータ(1726,'20120725','20120911','A'). テーブルデータ(1727,'20120725','20120726','A'). テーブルデータ(1728,'20120725','20120820','A'). テーブルデータ(1729,'20120725','20120828','A'). テーブルデータ(1730,'20120725','20120812','A'). テーブルデータ(1731,'20120725','20120730','A'). テーブルデータ(1732,'20120725','20120913','A'). テーブルデータ(1733,'20120725','20120815','A'). テーブルデータ(1734,'20120725','20120908','A'). テーブルデータ(1735,'20120725','20120803','A'). テーブルデータ(1736,'20120725','20120801','A'). テーブルデータ(1737,'20120725','20120913','A'). テーブルデータ(1738,'20120726','20120807','A'). テーブルデータ(1739,'20120726','20120813','A'). テーブルデータ(1740,'20120726','20120923','A'). テーブルデータ(1741,'20120726','20120909','A'). テーブルデータ(1742,'20120726','20120726','A'). テーブルデータ(1743,'20120726','20120817','A'). テーブルデータ(1744,'20120726','20120901','A'). テーブルデータ(1745,'20120726','20120916','A'). テーブルデータ(1746,'20120726','20120803','A'). テーブルデータ(1747,'20120726','20120727','A'). テーブルデータ(1748,'20120726','20120921','A'). テーブルデータ(1749,'20120726','20120802','A'). テーブルデータ(1750,'20120726','20120824','A'). テーブルデータ(1751,'20120726','20120921','A'). テーブルデータ(1752,'20120726','20120913','A'). テーブルデータ(1753,'20120726','20120813','A'). テーブルデータ(1754,'20120726','20120912','A'). テーブルデータ(1755,'20120727','20120923','A'). テーブルデータ(1756,'20120727','20120915','A'). テーブルデータ(1757,'20120727','20120910','A'). テーブルデータ(1758,'20120727','20120828','A'). テーブルデータ(1759,'20120727','20120727','A'). テーブルデータ(1760,'20120727','20120907','A'). テーブルデータ(1761,'20120727','20120810','A'). テーブルデータ(1762,'20120727','20120809','A'). テーブルデータ(1763,'20120727','20120823','A'). テーブルデータ(1764,'20120727','20120819','A'). テーブルデータ(1765,'20120727','20120816','A'). テーブルデータ(1766,'20120727','20120806','A'). テーブルデータ(1767,'20120727','20120728','A'). テーブルデータ(1768,'20120727','20120821','A'). テーブルデータ(1769,'20120727','20120824','A'). テーブルデータ(1770,'20120727','20120727','A'). テーブルデータ(1771,'20120727','20120806','A'). テーブルデータ(1772,'20120727','20120816','A'). テーブルデータ(1773,'20120727','20120810','A'). テーブルデータ(1774,'20120727','20120912','A'). テーブルデータ(1775,'20120728','20120820','A'). テーブルデータ(1776,'20120728','20120907','A'). テーブルデータ(1777,'20120728','20120920','A'). テーブルデータ(1778,'20120728','20120819','A'). テーブルデータ(1779,'20120728','20120807','A'). テーブルデータ(1780,'20120728','20120917','A'). テーブルデータ(1781,'20120729','20120818','A'). テーブルデータ(1782,'20120729','20120907','A'). テーブルデータ(1783,'20120729','20120812','A'). テーブルデータ(1784,'20120729','20120816','A'). テーブルデータ(1785,'20120730','20120920','A'). テーブルデータ(1786,'20120730','20120918','A'). テーブルデータ(1787,'20120730','20120821','A'). テーブルデータ(1788,'20120730','20120902','A'). テーブルデータ(1789,'20120730','20120804','A'). テーブルデータ(1790,'20120730','20120827','A'). テーブルデータ(1791,'20120730','20120922','A'). テーブルデータ(1792,'20120730','20120819','A'). テーブルデータ(1793,'20120730','20120916','A'). テーブルデータ(1794,'20120730','20120803','A'). テーブルデータ(1795,'20120730','20120821','A'). テーブルデータ(1796,'20120730','20120804','A'). テーブルデータ(1797,'20120730','20120823','A'). テーブルデータ(1798,'20120730','20120821','A'). テーブルデータ(1799,'20120730','20120806','A'). テーブルデータ(1800,'20120730','20120913','A'). テーブルデータ(1801,'20120730','20120905','A'). テーブルデータ(1802,'20120730','20120923','A'). テーブルデータ(1803,'20120730','20120910','A'). テーブルデータ(1804,'20120730','20120920','A'). テーブルデータ(1805,'20120730','20120827','A'). テーブルデータ(1806,'20120730','20120904','A'). テーブルデータ(1807,'20120730','20120805','A'). テーブルデータ(1808,'20120731','20120820','A'). テーブルデータ(1809,'20120801','20120921','A'). テーブルデータ(1810,'20120801','20120922','A'). テーブルデータ(1811,'20120801','20120817','A'). テーブルデータ(1812,'20120801','20120810','A'). テーブルデータ(1813,'20120801','20120815','A'). テーブルデータ(1814,'20120801','20120809','A'). テーブルデータ(1815,'20120801','20120922','A'). テーブルデータ(1816,'20120801','20120829','A'). テーブルデータ(1817,'20120801','20120912','A'). テーブルデータ(1818,'20120801','20120927','A'). テーブルデータ(1819,'20120802','20120907','A'). テーブルデータ(1820,'20120802','20120819','A'). テーブルデータ(1821,'20120802','20120908','A'). テーブルデータ(1822,'20120802','20120911','A'). テーブルデータ(1823,'20120802','20120910','A'). テーブルデータ(1824,'20120802','20120905','A'). テーブルデータ(1825,'20120802','20120807','A'). テーブルデータ(1826,'20120802','20120925','A'). テーブルデータ(1827,'20120802','20120913','A'). テーブルデータ(1828,'20120802','20120913','A'). テーブルデータ(1829,'20120802','20120825','A'). テーブルデータ(1830,'20120802','20120831','A'). テーブルデータ(1831,'20120802','20120818','A'). テーブルデータ(1832,'20120802','20120817','A'). テーブルデータ(1833,'20120802','20120928','A'). テーブルデータ(1834,'20120802','20120915','A'). テーブルデータ(1835,'20120802','20120815','A'). テーブルデータ(1836,'20120802','20120821','A'). テーブルデータ(1837,'20120802','20120806','A'). テーブルデータ(1838,'20120803','20120813','A'). テーブルデータ(1839,'20120803','20120928','A'). テーブルデータ(1840,'20120803','20120902','A'). テーブルデータ(1841,'20120803','20120815','A'). テーブルデータ(1842,'20120803','20120805','A'). テーブルデータ(1843,'20120803','20120910','A'). テーブルデータ(1844,'20120803','20120807','A'). テーブルデータ(1845,'20120803','20120826','A'). テーブルデータ(1846,'20120803','20120824','A'). テーブルデータ(1847,'20120803','20120804','A'). テーブルデータ(1848,'20120803','20120814','A'). テーブルデータ(1849,'20120803','20120921','A'). テーブルデータ(1850,'20120803','20120813','A'). テーブルデータ(1851,'20120803','20120912','A'). テーブルデータ(1852,'20120803','20120902','A'). テーブルデータ(1853,'20120804','20120819','A'). テーブルデータ(1854,'20120804','20120831','A'). テーブルデータ(1855,'20120804','20120909','A'). テーブルデータ(1856,'20120804','20120922','A'). テーブルデータ(1857,'20120804','20120805','A'). テーブルデータ(1858,'20120804','20121002','A'). テーブルデータ(1859,'20120804','20120822','A'). テーブルデータ(1860,'20120804','20120821','A'). テーブルデータ(1861,'20120804','20120810','A'). テーブルデータ(1862,'20120804','20120819','A'). テーブルデータ(1863,'20120804','20120805','A'). テーブルデータ(1864,'20120804','20120815','A'). テーブルデータ(1865,'20120804','20120907','A'). テーブルデータ(1866,'20120805','20120830','A'). テーブルデータ(1867,'20120805','20120911','A'). テーブルデータ(1868,'20120805','20120920','A'). テーブルデータ(1869,'20120805','20120930','A'). テーブルデータ(1870,'20120805','20120923','A'). テーブルデータ(1871,'20120805','20120915','A'). テーブルデータ(1872,'20120805','20120908','A'). テーブルデータ(1873,'20120805','20120927','A'). テーブルデータ(1874,'20120805','20120930','A'). テーブルデータ(1875,'20120805','20120921','A'). テーブルデータ(1876,'20120805','20120920','A'). テーブルデータ(1877,'20120805','20121003','A'). テーブルデータ(1878,'20120805','20120911','A'). テーブルデータ(1879,'20120805','20120930','A'). テーブルデータ(1880,'20120805','20120914','A'). テーブルデータ(1881,'20120805','20121003','A'). テーブルデータ(1882,'20120805','20120904','A'). テーブルデータ(1883,'20120805','20120921','A'). テーブルデータ(1884,'20120805','20120831','A'). テーブルデータ(1885,'20120805','20120811','A'). テーブルデータ(1886,'20120805','20120902','A'). テーブルデータ(1887,'20120805','20120901','A'). テーブルデータ(1888,'20120805','20121001','A'). テーブルデータ(1889,'20120805','20120920','A'). テーブルデータ(1890,'20120805','20120910','A'). テーブルデータ(1891,'20120805','20120929','A'). テーブルデータ(1892,'20120805','20120927','A'). テーブルデータ(1893,'20120805','20120911','A'). テーブルデータ(1894,'20120805','20120811','A'). テーブルデータ(1895,'20120806','20120902','A'). テーブルデータ(1896,'20120806','20120907','A'). テーブルデータ(1897,'20120806','20121001','A'). テーブルデータ(1898,'20120806','20120820','A'). テーブルデータ(1899,'20120806','20120826','A'). テーブルデータ(1900,'20120806','20120912','A'). テーブルデータ(1901,'20120806','20120930','A'). テーブルデータ(1902,'20120806','20120929','A'). テーブルデータ(1903,'20120806','20120905','A'). テーブルデータ(1904,'20120806','20120926','A'). テーブルデータ(1905,'20120806','20120917','A'). テーブルデータ(1906,'20120806','20120814','A'). テーブルデータ(1907,'20120806','20120925','A'). テーブルデータ(1908,'20120806','20120817','A'). テーブルデータ(1909,'20120806','20120811','A'). テーブルデータ(1910,'20120806','20120828','A'). テーブルデータ(1911,'20120806','20120816','A'). テーブルデータ(1912,'20120806','20120902','A'). テーブルデータ(1913,'20120806','20120807','A'). テーブルデータ(1914,'20120806','20120911','A'). テーブルデータ(1915,'20120807','20120905','A'). テーブルデータ(1916,'20120807','20121001','A'). テーブルデータ(1917,'20120807','20120830','A'). テーブルデータ(1918,'20120807','20120822','A'). テーブルデータ(1919,'20120807','20120907','A'). テーブルデータ(1920,'20120808','20120808','A'). テーブルデータ(1921,'20120808','20120808','A'). テーブルデータ(1922,'20120808','20120825','A'). テーブルデータ(1923,'20120808','20120828','A'). テーブルデータ(1924,'20120808','20120905','A'). テーブルデータ(1925,'20120808','20120918','A'). テーブルデータ(1926,'20120808','20120824','A'). テーブルデータ(1927,'20120808','20120911','A'). テーブルデータ(1928,'20120808','20120809','A'). テーブルデータ(1929,'20120808','20121001','A'). テーブルデータ(1930,'20120808','20120906','A'). テーブルデータ(1931,'20120808','20120925','A'). テーブルデータ(1932,'20120809','20120821','A'). テーブルデータ(1933,'20120809','20120831','A'). テーブルデータ(1934,'20120809','20120903','A'). テーブルデータ(1935,'20120809','20120811','A'). テーブルデータ(1936,'20120809','20120911','A'). テーブルデータ(1937,'20120809','20120831','A'). テーブルデータ(1938,'20120809','20120826','A'). テーブルデータ(1939,'20120809','20120921','A'). テーブルデータ(1940,'20120809','20120927','A'). テーブルデータ(1941,'20120809','20120819','A'). テーブルデータ(1942,'20120809','20120820','A'). テーブルデータ(1943,'20120809','20120824','A'). テーブルデータ(1944,'20120809','20120918','A'). テーブルデータ(1945,'20120809','20120815','A'). テーブルデータ(1946,'20120809','20120917','A'). テーブルデータ(1947,'20120809','20120925','A'). テーブルデータ(1948,'20120809','20120907','A'). テーブルデータ(1949,'20120810','20120927','A'). テーブルデータ(1950,'20120810','20120908','A'). テーブルデータ(1951,'20120810','20121008','A'). テーブルデータ(1952,'20120810','20120818','A'). テーブルデータ(1953,'20120810','20120928','A'). テーブルデータ(1954,'20120810','20120912','A'). テーブルデータ(1955,'20120810','20120826','A'). テーブルデータ(1956,'20120810','20120902','A'). テーブルデータ(1957,'20120810','20120905','A'). テーブルデータ(1958,'20120810','20120820','A'). テーブルデータ(1959,'20120810','20120923','A'). テーブルデータ(1960,'20120810','20120824','A'). テーブルデータ(1961,'20120810','20120829','A'). テーブルデータ(1962,'20120811','20120916','A'). テーブルデータ(1963,'20120811','20120924','A'). テーブルデータ(1964,'20120811','20121001','A'). テーブルデータ(1965,'20120811','20120820','A'). テーブルデータ(1966,'20120811','20121008','A'). テーブルデータ(1967,'20120811','20120811','A'). テーブルデータ(1968,'20120811','20120924','A'). テーブルデータ(1969,'20120811','20120919','A'). テーブルデータ(1970,'20120811','20120821','A'). テーブルデータ(1971,'20120811','20121005','A'). テーブルデータ(1972,'20120811','20121005','A'). テーブルデータ(1973,'20120811','20120930','A'). テーブルデータ(1974,'20120811','20120812','A'). テーブルデータ(1975,'20120811','20120906','A'). テーブルデータ(1976,'20120811','20120910','A'). テーブルデータ(1977,'20120811','20120902','A'). テーブルデータ(1978,'20120811','20120819','A'). テーブルデータ(1979,'20120811','20120829','A'). テーブルデータ(1980,'20120811','20120924','A'). テーブルデータ(1981,'20120811','20121009','A'). テーブルデータ(1982,'20120811','20120829','A'). テーブルデータ(1983,'20120811','20120913','A'). テーブルデータ(1984,'20120811','20120904','A'). テーブルデータ(1985,'20120811','20120914','A'). テーブルデータ(1986,'20120811','20120929','A'). テーブルデータ(1987,'20120811','20121001','A'). テーブルデータ(1988,'20120811','20120917','A'). テーブルデータ(1989,'20120812','20121008','A'). テーブルデータ(1990,'20120812','20121007','A'). テーブルデータ(1991,'20120812','20120903','A'). テーブルデータ(1992,'20120812','20120915','A'). テーブルデータ(1993,'20120812','20120913','A'). テーブルデータ(1994,'20120812','20120817','A'). テーブルデータ(1995,'20120812','20120916','A'). テーブルデータ(1996,'20120812','20120911','A'). テーブルデータ(1997,'20120812','20120817','A'). テーブルデータ(1998,'20120812','20120824','A'). テーブルデータ(1999,'20120812','20120821','A'). テーブルデータ(2000,'20120812','20120819','A'). テーブルデータ(2001,'20120812','20120819','A'). テーブルデータ(2002,'20120812','20121007','A'). テーブルデータ(2003,'20120812','20121009','A'). テーブルデータ(2004,'20120812','20120813','A'). テーブルデータ(2005,'20120812','20120903','A'). テーブルデータ(2006,'20120812','20120901','A'). テーブルデータ(2007,'20120812','20120904','A'). テーブルデータ(2008,'20120812','20120903','A'). テーブルデータ(2009,'20120812','20120919','A'). テーブルデータ(2010,'20120812','20120819','A'). テーブルデータ(2011,'20120812','20120826','A'). テーブルデータ(2012,'20120812','20121007','A'). テーブルデータ(2013,'20120812','20120914','A'). テーブルデータ(2014,'20120812','20120919','A'). テーブルデータ(2015,'20120813','20120827','A'). テーブルデータ(2016,'20120814','20120821','A'). テーブルデータ(2017,'20120814','20120922','A'). テーブルデータ(2018,'20120814','20120910','A'). テーブルデータ(2019,'20120814','20121008','A'). テーブルデータ(2020,'20120814','20120815','A'). テーブルデータ(2021,'20120814','20121006','A'). テーブルデータ(2022,'20120814','20120910','A'). テーブルデータ(2023,'20120814','20121011','A'). テーブルデータ(2024,'20120814','20120903','A'). テーブルデータ(2025,'20120814','20121002','A'). テーブルデータ(2026,'20120814','20121008','A'). テーブルデータ(2027,'20120814','20120915','A'). テーブルデータ(2028,'20120814','20121004','A'). テーブルデータ(2029,'20120814','20120817','A'). テーブルデータ(2030,'20120814','20120915','A'). テーブルデータ(2031,'20120814','20120930','A'). テーブルデータ(2032,'20120814','20121006','A'). テーブルデータ(2033,'20120814','20120916','A'). テーブルデータ(2034,'20120814','20120816','A'). テーブルデータ(2035,'20120814','20120827','A'). テーブルデータ(2036,'20120814','20121001','A'). テーブルデータ(2037,'20120814','20120830','A'). テーブルデータ(2038,'20120814','20121004','A'). テーブルデータ(2039,'20120814','20121009','A'). テーブルデータ(2040,'20120814','20120913','A'). テーブルデータ(2041,'20120814','20120922','A'). テーブルデータ(2042,'20120814','20120904','A'). テーブルデータ(2043,'20120814','20120823','A'). テーブルデータ(2044,'20120814','20120815','A'). テーブルデータ(2045,'20120814','20120918','A'). テーブルデータ(2046,'20120815','20120824','A'). テーブルデータ(2047,'20120816','20121004','A'). テーブルデータ(2048,'20120816','20121011','A'). テーブルデータ(2049,'20120816','20120824','A'). テーブルデータ(2050,'20120816','20120927','A'). テーブルデータ(2051,'20120816','20120909','A'). テーブルデータ(2052,'20120816','20120822','A'). テーブルデータ(2053,'20120816','20121010','A'). テーブルデータ(2054,'20120816','20120829','A'). テーブルデータ(2055,'20120816','20121009','A'). テーブルデータ(2056,'20120816','20120912','A'). テーブルデータ(2057,'20120816','20120820','A'). テーブルデータ(2058,'20120816','20121012','A'). テーブルデータ(2059,'20120816','20121006','A'). テーブルデータ(2060,'20120816','20120929','A'). テーブルデータ(2061,'20120816','20121005','A'). テーブルデータ(2062,'20120817','20120924','A'). テーブルデータ(2063,'20120817','20120820','A'). テーブルデータ(2064,'20120817','20120830','A'). テーブルデータ(2065,'20120817','20121010','A'). テーブルデータ(2066,'20120817','20121002','A'). テーブルデータ(2067,'20120817','20120818','A'). テーブルデータ(2068,'20120817','20120911','A'). テーブルデータ(2069,'20120817','20120911','A'). テーブルデータ(2070,'20120817','20120831','A'). テーブルデータ(2071,'20120817','20120912','A'). テーブルデータ(2072,'20120817','20120912','A'). テーブルデータ(2073,'20120817','20121005','A'). テーブルデータ(2074,'20120817','20121012','A'). テーブルデータ(2075,'20120817','20120913','A'). テーブルデータ(2076,'20120817','20121011','A'). テーブルデータ(2077,'20120817','20121002','A'). テーブルデータ(2078,'20120817','20120910','A'). テーブルデータ(2079,'20120817','20120820','A'). テーブルデータ(2080,'20120817','20120906','A'). テーブルデータ(2081,'20120817','20120926','A'). テーブルデータ(2082,'20120817','20120819','A'). テーブルデータ(2083,'20120817','20120901','A'). テーブルデータ(2084,'20120817','20121009','A'). テーブルデータ(2085,'20120817','20121004','A'). テーブルデータ(2086,'20120817','20120921','A'). テーブルデータ(2087,'20120818','20121002','A'). テーブルデータ(2088,'20120818','20120913','A'). テーブルデータ(2089,'20120818','20120913','A'). テーブルデータ(2090,'20120818','20120914','A'). テーブルデータ(2091,'20120818','20120930','A'). テーブルデータ(2092,'20120818','20120822','A'). テーブルデータ(2093,'20120818','20120917','A'). テーブルデータ(2094,'20120818','20121005','A'). テーブルデータ(2095,'20120818','20121007','A'). テーブルデータ(2096,'20120818','20120826','A'). テーブルデータ(2097,'20120818','20120928','A'). テーブルデータ(2098,'20120818','20120902','A'). テーブルデータ(2099,'20120818','20120920','A'). テーブルデータ(2100,'20120818','20121012','A'). テーブルデータ(2101,'20120818','20120928','A'). テーブルデータ(2102,'20120818','20121008','A'). テーブルデータ(2103,'20120818','20121001','A'). テーブルデータ(2104,'20120818','20120917','A'). テーブルデータ(2105,'20120818','20120829','A'). テーブルデータ(2106,'20120818','20120918','A'). テーブルデータ(2107,'20120818','20120826','A'). テーブルデータ(2108,'20120819','20120915','A'). テーブルデータ(2109,'20120819','20120916','A'). テーブルデータ(2110,'20120819','20120903','A'). テーブルデータ(2111,'20120819','20120909','A'). テーブルデータ(2112,'20120819','20120924','A'). テーブルデータ(2113,'20120819','20120819','A'). テーブルデータ(2114,'20120820','20120831','A'). テーブルデータ(2115,'20120820','20121001','A'). テーブルデータ(2116,'20120820','20121013','A'). テーブルデータ(2117,'20120820','20120918','A'). テーブルデータ(2118,'20120820','20120820','A'). テーブルデータ(2119,'20120820','20120910','A'). テーブルデータ(2120,'20120820','20120824','A'). テーブルデータ(2121,'20120820','20120824','A'). テーブルデータ(2122,'20120820','20121002','A'). テーブルデータ(2123,'20120820','20121011','A'). テーブルデータ(2124,'20120821','20121011','A'). テーブルデータ(2125,'20120821','20120923','A'). テーブルデータ(2126,'20120821','20120823','A'). テーブルデータ(2127,'20120821','20120906','A'). テーブルデータ(2128,'20120821','20120910','A'). テーブルデータ(2129,'20120821','20120926','A'). テーブルデータ(2130,'20120821','20121019','A'). テーブルデータ(2131,'20120821','20121016','A'). テーブルデータ(2132,'20120821','20121018','A'). テーブルデータ(2133,'20120821','20120831','A'). テーブルデータ(2134,'20120821','20120918','A'). テーブルデータ(2135,'20120821','20120827','A'). テーブルデータ(2136,'20120821','20120927','A'). テーブルデータ(2137,'20120821','20121015','A'). テーブルデータ(2138,'20120821','20120924','A'). テーブルデータ(2139,'20120821','20121004','A'). テーブルデータ(2140,'20120821','20120906','A'). テーブルデータ(2141,'20120821','20120831','A'). テーブルデータ(2142,'20120821','20121005','A'). テーブルデータ(2143,'20120821','20120915','A'). テーブルデータ(2144,'20120821','20120903','A'). テーブルデータ(2145,'20120821','20120909','A'). テーブルデータ(2146,'20120821','20120901','A'). テーブルデータ(2147,'20120821','20120925','A'). テーブルデータ(2148,'20120821','20120910','A'). テーブルデータ(2149,'20120821','20120914','A'). テーブルデータ(2150,'20120822','20120907','A'). テーブルデータ(2151,'20120822','20120829','A'). テーブルデータ(2152,'20120822','20120915','A'). テーブルデータ(2153,'20120822','20120825','A'). テーブルデータ(2154,'20120822','20121011','A'). テーブルデータ(2155,'20120822','20121010','A'). テーブルデータ(2156,'20120822','20120828','A'). テーブルデータ(2157,'20120822','20120828','A'). テーブルデータ(2158,'20120822','20120901','A'). テーブルデータ(2159,'20120822','20120925','A'). テーブルデータ(2160,'20120823','20121020','A'). テーブルデータ(2161,'20120823','20120924','A'). テーブルデータ(2162,'20120823','20120831','A'). テーブルデータ(2163,'20120823','20120918','A'). テーブルデータ(2164,'20120823','20120930','A'). テーブルデータ(2165,'20120823','20121007','A'). テーブルデータ(2166,'20120824','20120828','A'). テーブルデータ(2167,'20120824','20120923','A'). テーブルデータ(2168,'20120824','20120914','A'). テーブルデータ(2169,'20120824','20120831','A'). テーブルデータ(2170,'20120824','20120831','A'). テーブルデータ(2171,'20120824','20121001','A'). テーブルデータ(2172,'20120824','20120913','A'). テーブルデータ(2173,'20120824','20120911','A'). テーブルデータ(2174,'20120824','20121012','A'). テーブルデータ(2175,'20120824','20121010','A'). テーブルデータ(2176,'20120824','20121001','A'). テーブルデータ(2177,'20120824','20120906','A'). テーブルデータ(2178,'20120824','20120912','A'). テーブルデータ(2179,'20120824','20121010','A'). テーブルデータ(2180,'20120825','20120929','A'). テーブルデータ(2181,'20120825','20121014','A'). テーブルデータ(2182,'20120825','20120827','A'). テーブルデータ(2183,'20120825','20120918','A'). テーブルデータ(2184,'20120825','20121012','A'). テーブルデータ(2185,'20120825','20120825','A'). テーブルデータ(2186,'20120825','20120920','A'). テーブルデータ(2187,'20120825','20120916','A'). テーブルデータ(2188,'20120825','20120831','A'). テーブルデータ(2189,'20120825','20120919','A'). テーブルデータ(2190,'20120825','20121010','A'). テーブルデータ(2191,'20120825','20120831','A'). テーブルデータ(2192,'20120825','20121007','A'). テーブルデータ(2193,'20120826','20121016','A'). テーブルデータ(2194,'20120826','20121022','A'). テーブルデータ(2195,'20120826','20120916','A'). テーブルデータ(2196,'20120826','20120908','A'). テーブルデータ(2197,'20120826','20120905','A'). テーブルデータ(2198,'20120826','20120923','A'). テーブルデータ(2199,'20120826','20120907','A'). テーブルデータ(2200,'20120826','20121014','A'). テーブルデータ(2201,'20120826','20121005','A'). テーブルデータ(2202,'20120826','20120926','A'). テーブルデータ(2203,'20120826','20120925','A'). テーブルデータ(2204,'20120826','20120923','A'). テーブルデータ(2205,'20120826','20120827','A'). テーブルデータ(2206,'20120826','20121001','A'). テーブルデータ(2207,'20120826','20121012','A'). テーブルデータ(2208,'20120826','20121013','A'). テーブルデータ(2209,'20120826','20121013','A'). テーブルデータ(2210,'20120826','20120917','A'). テーブルデータ(2211,'20120826','20120926','A'). テーブルデータ(2212,'20120826','20121008','A'). テーブルデータ(2213,'20120826','20121003','A'). テーブルデータ(2214,'20120826','20120914','A'). テーブルデータ(2215,'20120826','20121008','A'). テーブルデータ(2216,'20120826','20120831','A'). テーブルデータ(2217,'20120826','20120929','A'). テーブルデータ(2218,'20120827','20120918','A'). テーブルデータ(2219,'20120827','20120908','A'). テーブルデータ(2220,'20120827','20121013','A'). テーブルデータ(2221,'20120827','20121023','A'). テーブルデータ(2222,'20120827','20120925','A'). テーブルデータ(2223,'20120827','20120927','A'). テーブルデータ(2224,'20120827','20121020','A'). テーブルデータ(2225,'20120827','20121016','A'). テーブルデータ(2226,'20120827','20121010','A'). テーブルデータ(2227,'20120827','20121023','A'). テーブルデータ(2228,'20120827','20120914','A'). テーブルデータ(2229,'20120827','20121023','A'). テーブルデータ(2230,'20120828','20121025','A'). テーブルデータ(2231,'20120828','20120917','A'). テーブルデータ(2232,'20120828','20120905','A'). テーブルデータ(2233,'20120828','20120923','A'). テーブルデータ(2234,'20120828','20120918','A'). テーブルデータ(2235,'20120828','20121011','A'). テーブルデータ(2236,'20120828','20120902','A'). テーブルデータ(2237,'20120828','20120830','A'). テーブルデータ(2238,'20120828','20120922','A'). テーブルデータ(2239,'20120828','20120916','A'). テーブルデータ(2240,'20120828','20120930','A'). テーブルデータ(2241,'20120828','20120905','A'). テーブルデータ(2242,'20120828','20121025','A'). テーブルデータ(2243,'20120828','20121011','A'). テーブルデータ(2244,'20120828','20121010','A'). テーブルデータ(2245,'20120828','20121022','A'). テーブルデータ(2246,'20120828','20120907','A'). テーブルデータ(2247,'20120829','20120907','A'). テーブルデータ(2248,'20120829','20120921','A'). テーブルデータ(2249,'20120829','20120902','A'). テーブルデータ(2250,'20120829','20120904','A'). テーブルデータ(2251,'20120829','20121020','A'). テーブルデータ(2252,'20120829','20121003','A'). テーブルデータ(2253,'20120829','20121021','A'). テーブルデータ(2254,'20120829','20121010','A'). テーブルデータ(2255,'20120829','20120918','A'). テーブルデータ(2256,'20120829','20121018','A'). テーブルデータ(2257,'20120829','20120829','A'). テーブルデータ(2258,'20120829','20120907','A'). テーブルデータ(2259,'20120829','20120926','A'). テーブルデータ(2260,'20120829','20121018','A'). テーブルデータ(2261,'20120829','20120927','A'). テーブルデータ(2262,'20120829','20121004','A'). テーブルデータ(2263,'20120829','20120915','A'). テーブルデータ(2264,'20120829','20121010','A'). テーブルデータ(2265,'20120829','20120919','A'). テーブルデータ(2266,'20120829','20120912','A'). テーブルデータ(2267,'20120829','20121012','A'). テーブルデータ(2268,'20120829','20121006','A'). テーブルデータ(2269,'20120829','20121002','A'). テーブルデータ(2270,'20120829','20120907','A'). テーブルデータ(2271,'20120829','20121006','A'). テーブルデータ(2272,'20120829','20120922','A'). テーブルデータ(2273,'20120830','20120920','A'). テーブルデータ(2274,'20120830','20120918','A'). テーブルデータ(2275,'20120830','20121025','A'). テーブルデータ(2276,'20120830','20121007','A'). テーブルデータ(2277,'20120830','20120919','A'). テーブルデータ(2278,'20120830','20120918','A'). テーブルデータ(2279,'20120830','20121012','A'). テーブルデータ(2280,'20120830','20120925','A'). テーブルデータ(2281,'20120830','20120902','A'). テーブルデータ(2282,'20120830','20120917','A'). テーブルデータ(2283,'20120830','20120918','A'). テーブルデータ(2284,'20120830','20121014','A'). テーブルデータ(2285,'20120830','20120929','A'). テーブルデータ(2286,'20120830','20120831','A'). テーブルデータ(2287,'20120830','20121006','A'). テーブルデータ(2288,'20120830','20120930','A'). テーブルデータ(2289,'20120830','20120928','A'). テーブルデータ(2290,'20120830','20120927','A'). テーブルデータ(2291,'20120830','20121021','A'). テーブルデータ(2292,'20120830','20120905','A'). テーブルデータ(2293,'20120830','20121006','A'). テーブルデータ(2294,'20120830','20121004','A'). テーブルデータ(2295,'20120830','20120918','A'). テーブルデータ(2296,'20120830','20121012','A'). テーブルデータ(2297,'20120830','20120918','A'). テーブルデータ(2298,'20120831','20120917','A'). テーブルデータ(2299,'20120831','20120929','A'). テーブルデータ(2300,'20120831','20120927','A'). テーブルデータ(2301,'20120831','20121003','A'). テーブルデータ(2302,'20120831','20120915','A'). テーブルデータ(2303,'20120831','20121010','A'). テーブルデータ(2304,'20120831','20121014','A'). テーブルデータ(2305,'20120831','20120911','A'). テーブルデータ(2306,'20120831','20120919','A'). テーブルデータ(2307,'20120831','20120904','A'). テーブルデータ(2308,'20120831','20121001','A'). テーブルデータ(2309,'20120831','20121024','A'). テーブルデータ(2310,'20120831','20120923','A'). テーブルデータ(2311,'20120831','20120926','A'). テーブルデータ(2312,'20120831','20120904','A'). テーブルデータ(2313,'20120831','20121012','A'). テーブルデータ(2314,'20120831','20120912','A'). テーブルデータ(2315,'20120831','20120927','A'). テーブルデータ(2316,'20120831','20121006','A'). テーブルデータ(2317,'20120831','20121011','A'). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #603 # MySQL # # テーブルデータにNo int(255)があります。 # # 現在Noには10000件のデータがあり追加や削除を繰り返しているので # 既にNo連続した数字にはなっていません。 # # 今回、取得したいのはNoが5000以上でNo小さい方から30件取得して # Noが大きい順に並べ替えて取得したいです。 # # この場合のSQLはどう書けばいいでしょうか? # # :- dynamic(テーブルデータ/1). 'Noが5000以上でNoの小さい方から30件取得してNoが大きい順に並べ替えて取得したいです。'(_No) :- 'Noが5000以上で'(_5000以上のNoならび), 'Noの小さい方から30件取得してNoが大きい順に並べ替えて'(_5000以上のNoならび,_小さい方から30件取得して大きい順に並べ替えたNoならび), 取得したい(_小さい方から30件取得して大きい順に並べ替えたNoならび,_No). 'Noが5000以上で'(_5000以上のNoならび) :- findall(_No,( 'Noが5000以上のデータを得る'(_No)),_5000以上のNoならび). 'Noが5000以上のデータを得る'(_No) :- テーブルデータ(_No), _No >= 5000. 'Noの小さい方から30件取得してNoが大きい順に並べ替えて'(_5000以上のNoならび,_小さい方から30件取得して大きい順に並べ替えたNoならび) :- 'Noの小さい方から30件取得して'(_5000以上のNoならび,L30), 'Noが大きい順に並べ替えて'(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび). 'Noの小さい方から30件取得して'(_5000以上のNoならび,L30) :- sort(_5000以上のNoならび,L2), length(L30,30), append(L30,_,L2). 'Noが大きい順に並べ替えて'(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび) :- reverse(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび). 取得したい(_小さい方から30件取得して大きい順に並べ替えたNoならび,_No) :- member(_No,_小さい方から30件取得して大きい順に並べ替えたNoならび). テーブルデータの生成 :- length(Ln,10000), テーブルデータの生成(Ln). テーブルデータの生成([]) :- !. テーブルデータの生成(Ln) :- 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln). 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln) :- ランダムに得た数が(_ランダムに得た数), 初出の時はテーブルデータとして書き加えて行く(Ln,_ランダムに得た数). 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln) :- テーブルデータの生成(Ln). ランダムに得た数が(_ランダムに得た数) :- _ランダムに得た数 is random(15000). 初出の時はテーブルデータとして書き加えて行く([_|Ln],_ランダムに得た数) :- 初出の時は(_ランダムに得た数), テーブルデータとして書き加えて行く(Ln,_ランダムに得た数). 初出の時は(_ランダムに得た数) :- \+(catch(テーブルデータ(_ランダムに得た数),E,fail)). テーブルデータとして書き加えて行く(Ln,_ランダムに得た数) :- assertz(テーブルデータ(_ランダムに得た数)), テーブルデータの生成(Ln). :- テーブルデータの生成. % 以下のサイトは # 出典 :: SQL質疑応答スレ 10問目 #197 # ・DBMS名とバージョン # VB2008でOLEDBを使ってOracle10gに繋いでます。 # # ・テーブルデータ # どの部品にはどの部品が使われてて〜といううような、 # 部品の構成を表す、下記のような親子関係と必要数のテーブルがあります # ------------- # OYA KO KAZU # ------------- # A   B  1 # A   G  1 # B   C  1 # B   F  1 # C   D  1 # C   E  1 # G   C  2 # G   H  1 # # # ツリーで表記すると、 # A # ├B # │├C # ││├D # ││└E # │└F # └G #  ├C #  │├D #  │└E #  └H # # Aという部品は、BとGの部品で出来ている。 # Bという部品はCとFの部品で出来ている〜という感じです。 # # ・欲しい結果 # これを階層のレベルと、それぞれの子の合計数を出したい。 # ここでいうBの下のCは1なので、DもEも1だが、 # Gの下のCは2なので、DもEもx2されて2になる # ---------------- # LV KO  GOUKEI # ---------------- # 1  B   1 # 2  C   1 # 3  D   1 # 3  E   1 # 2  F   1 # 1  G   1 # 2  C   2 # 3  D   2 # 3  E   2 # 2  H   1 # # # 今は、プログラム側で親から子を見る所をサブルーチンで組み、回帰処理でループさせてるので、 # リクエストが多く、あまりにも酷いかなぁ。。。と。 # 色々サンプルを見てconect byとかよく似てるんで、何かやり方があるのかな?と思い質問してみました。 # # 部品('A','B',1). 部品('A','G',1). 部品('B','C',1). 部品('B','F',1). 部品('C','D',1). 部品('C','E',1). 部品('G','C',2). 部品('G','H',1). 必要な部品数(_階層,_親,1) :- 子供がいない時はそれ自体1個の部品と考える(_階層,_親),!. 必要な部品数(_階層,_親,_必要な部品数) :- 子供がいる時は全ての子供の必要な部品総計を求める(_階層,_親,_必要な部品数). 子供がいる時は全ての子供の必要な部品総計を求める(_階層,_親,_必要な部品数) :- findsum(_ある子供の部品数の必要な総計,( ある子供の部品数の必要な総計(_階層,_親,_ある子供の部品数の必要な総計)),_必要な部品数), writef('%w,%w,%w\n',[_階層,_親,_必要な部品数]). 子供がいない時はそれ自体1個の部品と考える(_階層,_親) :- \+(部品(_親,_,_)), writef('%w,%w,%w\n',[_階層,_親,1]),!. ある子供の部品数の必要な総計(_階層,_親,_ある子供の部品数の必要な総計) :- ある子供の部品数(_階層,_親,_個数,_ある子供の部品数), _ある子供の部品数の必要な総計 is _ある子供の部品数 * _個数. ある子供の部品数(_階層,_親,_個数,_ある子供の部品数) :- 部品(_親,_子,_個数), succ(_階層,_階層_2), 必要な部品数(_階層_2,_子,_ある子供の部品数). findsum(A,B,C) :- findall(A,B,L), sum_list(L,C). % 以下のサイトは # 出典 :: SQL質疑応答スレ 9問目 #817 # [テーブルA] # ID, AGE, GROUP # --- ---- ----- # 1 , 10, A # 2 , 20, A # 3 , 30, A # 4 , 20, B # 5 , 40, B # 6 , 60, B # 7 , 10, C # 8 , 30, C # 9 , 50, C # 10 , 70, C # # ↑のテーブルから、 # 各GROUP毎にAGEで順位付けした結果を取得したいです。 # # <結果> # # ID, AGE, GROUP, RANK # --- ---- ----- ----- # 1 , 10, A 1 # 2 , 20, A 2 # 3 , 30, A 3 # 4 , 20, B 1 # 5 , 40, B 2 # 6 , 60, B 3 # 7 , 10, C 1 # 8 , 30, C 2 # 9 , 50, C 3 # 10 , 70, C 4 # # # GROUP BYを使ってみたのですが、 # どうも見当違いのSQLになってしまって。。 # # すいませんが、どのようなSQLを書けばよいかご教示ください。 # テーブルA(8,30,'C'). テーブルA(4,20,'B'). テーブルA(1,10,'A'). テーブルA(10,70,'C'). テーブルA(2,20,'A'). テーブルA(9,50,'C'). テーブルA(6,60,'B'). テーブルA(7,10,'C'). テーブルA(3,30,'A'). テーブルA(5,40,'B'). '各GROUP毎にAGEで順位付けした結果を取得'(X) :- 'GROUPならび'(_GROUPならび), '各GROUP毎にAGEで順位付けした結果を取得'(_GROUPならび,X). 'GROUPならび'(_GROUPならび) :- setof(_GROUP,[_ID,_AGE,_GROUP] ^ テーブルA(_ID,_AGE,_GROUP),_GROUPならび). '各GROUP毎にAGEで順位付けした結果を取得'([],[]) :- !. '各GROUP毎にAGEで順位付けした結果を取得'(_GROUPならび,X) :- '各GROUP毎にAGEで順位付けした結果を取得して行く'(_GROUPならび,X). '各GROUP毎にAGEで順位付けした結果を取得して行く'([_GROUP|R1],X) :- '各GROUP毎にAGEで順位付けした'(_GROUP,L4), '各GROUP毎にAGEで順位付けした結果を取得'(R1,Y), append(L4,Y,X). '各GROUP毎にAGEで順位付けした'(_GROUP,L4) :- '_GROUPのデータの_AGEを整列鍵に'(_GROUP,L2), '整列し_AGEで順位付けした'(L2,L4). '_GROUPのデータの_AGEを整列鍵に'(_GROUP,L2) :- findall([_AGE,_GROUP,_ID],テーブルA(_ID,_AGE,_GROUP),L2). '整列し_AGEで順位付けした'(L2,L4) :- 整列(L2,L3), 'GROUP内の順位づけ'(1,L3,L4). 'GROUP内の順位づけ'(_,[],[]) :- !. 'GROUP内の順位づけ'(N,[[_AGE,_GROUP,_ID]|R1],[[_ID,_AGE,_GROUP,N]|R2]) :- N2 is N + 1, 'GROUP内の順位づけ'(N2,R1,R2). 整列(L1,L2) :- 先頭要素を軸要素として重複要素を許すクイックソート(L1,L2). 先頭要素を軸要素として重複要素を許すクイックソート([],[]). 先頭要素を軸要素として重複要素を許すクイックソート([_軸要素|L1],L2) :- 軸要素に対する大小で二つのならびに分割する(_軸要素,L1,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび), 先頭要素を軸要素として重複要素を許すクイックソート(_軸要素と等しいかより小さい要素のならび,L2_1), 先頭要素を軸要素として重複要素を許すクイックソート(_軸要素より大きい要素のならび,L2_2), append(L2_1,[_軸要素|L2_2],L2). 軸要素に対する大小で二つのならびに分割する(_,[],[],[]). 軸要素に対する大小で二つのならびに分割する(_軸要素,[_要素|_残りならび],[_要素|_軸要素と等しいかより小さい要素のならび],_軸要素より大きい要素のならび) :- _軸要素 @>= _要素, 軸要素に対する大小で二つのならびに分割する(_軸要素,_残りならび,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび). 軸要素に対する大小で二つのならびに分割する(_軸要素,[_要素|_残りならび],_軸要素と等しいかより小さい要素のならび,[_要素|_軸要素より大きい要素のならび]) :- _軸要素 @< _要素, 軸要素に対する大小で二つのならびに分割する(_軸要素,_残りならび,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #106 # ストアドプロシージャについて質問させてください。 # # 簡単な結果を返すクエリ # SELECT A,B,C FROM TEST # # といったクエリの結果を戻り値として返すストアドを作成したいのですが # どのように書けば良いのかわかりません。 # # 単一の列のみを返す方法ならわかったのですが、複数列を返す方法が # 分からないといった状態です。 # テーブル構造('TEST',1,'A'). テーブル構造('TEST',2,'B'). テーブル構造('TEST',3,'C'). 'TEST'(200,300,400). 'TEST'(80,90,100). 簡単な結果を返すクエリ(_テーブル名,_選択項名ならび,_選択値ならび) :- 項名と値の結合(_テーブル名,_値ならび,_選択項名ならび,_選択値ならび), テーブル構造から引数の数を調べて目標を構成して実行する(_テーブル名,_値ならび). 項名と値の結合(_,_,[],[]). 項名と値の結合(_テーブル名,_値ならび,_選択項名ならび,_選択値ならび) :- 項名と値ならびの値を結合して行く(_テーブル名,_値ならび,_選択項名ならび,_選択値ならび). 項名と値ならびの値を結合して行く(_テーブル名,_値ならび,[_項名|R1],[_値|R2]) :- テーブル構造(_テーブル名,_nth1,_項名), nth1(_nth1,_値ならび,_値), 項名と値の結合(_テーブル名,_値ならび,R1,R2). 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). テーブル構造から引数の数を調べて目標を構成して実行する(_テーブル名,_値ならび) :- テーブル構造から引数の数を調べて目標を構成して(_テーブル名,_値ならび,_目標), 実行する(_目標). テーブル構造から引数の数を調べて目標を構成して(_テーブル名,_値ならび,_目標) :- 度数(テーブル構造(_テーブル名,_,_),Len), length(_値ならび,Len), _目標 =.. [_テーブル名|_値ならび]. 実行する(_目標) :- call(_目標). % 以下のサイトは # テーブルPersonが参照している複数のPersonを取得したいのですが助言ください。 # # 「テーブル」 # Person { id, name } # Friend { from, to } // from, to ともにPerson.id # # 「データ表」 # id | name | # --+-----+-- # 1, "A" # 2, "B" # 3, "C" # 4, "D" # 5, "E" # # from | to | # ----+---+-- # 1, 3 # 1, 4 # 1, 5 # 2, 4 # 3, 1 # 4, 1 # 4, 2 # 5, 1 # # [クエリ結果] # 1, 3, "C" # 1, 4, "D" # 1, 5, "E" # 2, 4, "D" # 3, 1, "A" # 4, 1, "A" # 4, 2, "B" # 5, 1, "A" # # SQL SELECT p1.id, p2.* FROM Person p1, Friend , Person p2 WHERE p1.id = Friend.from and Friend.to = p2.id; # テーブルPersonが参照している複数のPersonを取得したい(_id,_to,_name) :- テーブルPersonが(_id), 参照している複数のPersonを取得したい(_id,_to,_name). テーブルPersonが(_id) :- 'Person'(_id,_). 参照している複数のPersonを取得したい(_from,_to,_name) :- 'Friend'(_from,_to), 'Person'(_to,_name). 'Person'(1,'A'). 'Person'(2,'B'). 'Person'(3,'C'). 'Person'(4,'D'). 'Person'(5,'E'). 'Friend'(1,3). 'Friend'(1,4). 'Friend'(1,5). 'Friend'(2,4). 'Friend'(3,1). 'Friend'(4,1). 'Friend'(4,2). 'Friend'(5,1). % 以下のサイトは # テーブルPersonが参照している複数のPersonを取得したいのですが助言ください。 # # 「テーブル」 # Person { id, name } # Friend { from, to } // from, to ともにPerson.id # # 「データ表」 # id | name | # --+-----+-- # 1, "A" # 2, "B" # 3, "C" # 4, "D" # 5, "E" # # from | to | # ----+---+-- # 1, 3 # 1, 4 # 1, 5 # 2, 4 # 3, 1 # 4, 1 # 4, 2 # 5, 1 # # [クエリ結果] # 1, 3, "C" # 1, 4, "D" # 1, 5, "E" # 2, 4, "D" # 3, 1, "A" # 4, 1, "A" # 4, 2, "B" # 5, 1, "A" # # SQL SELECT p1.id, p2.* FROM Person p1, Friend , Person p2 WHERE p1.id = Friend.from and Friend.to = p2.id; # テーブルPersonが参照している複数のPersonを取得したい(_id,_to,_name) :- person(_id,_), 'Friend'(_id,_to), person(_to,_name). person(1,'A'). person(2,'B'). person(3,'C'). person(4,'D'). person(5,'E'). 'Friend'(1,3). 'Friend'(1,4). 'Friend'(1,5). 'Friend'(2,4). 'Friend'(3,1). 'Friend'(4,1). 'Friend'(4,2). 'Friend'(5,1). % 以下のサイトは # 出典 :: #132 # 親テーブル # Id, 資産 # 1, 100 # 2, 200 # 3, 400 # # 子テーブル # Id, 親Id, 資産 # 1, 1, 10 # 2, 1, 20 # 3, 2, 10 # 4, 2, 20 # 5, 2, 30 # 6, 3, 10 # # から # Id, 資産 # 1, 60 -- 親1の子供は二人だから、各々の子に 100/2 = 50 を加算する。 # 2, 70 # 3, 76 -- 親2の子供は三人だから、各々の子に 200/3 = 66 を加算する。 # 4, 86 # 5, 96 # 6, 410 -- 親3の子供は一人だから、400 をそのまま加算する。 # # という結果を得たい。 # 要するに、親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい。 # SQL で出来ます? # # 親テーブル(1, 100). 親テーブル(2, 200). 親テーブル(3, 400). 子テーブル(1, 1, 10). 子テーブル(2, 1, 20). 子テーブル(3, 2, 10). 子テーブル(4, 2, 20). 子テーブル(5, 2, 30). 子テーブル(6, 3, 10). 親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい(_一覧) :- findall([_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額],子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額),_一覧). 子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- 子テーブル(_Id,_親Id,_資産), 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数), 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額). 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数) :- 親テーブル(_親Id,_親資産), 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数). 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数) :- 度数(子テーブル(_,_親Id,_),_自分を含めた兄弟人数). 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- _親の資産を子供に分配して各々の子供の資産と合わせた額 is _資産 + _親資産 // _自分を含めた兄弟人数. 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). % 以下のサイトは # 出典 :: #132 # 親テーブル # Id, 資産 # 1, 100 # 2, 200 # 3, 400 # # 子テーブル # Id, 親Id, 資産 # 1, 1, 10 # 2, 1, 20 # 3, 2, 10 # 4, 2, 20 # 5, 2, 30 # 6, 3, 10 # # から # Id, 資産 # 1, 60 -- 親1の子供は二人だから、各々の子に 100/2 = 50 を加算する。 # 2, 70 # 3, 76 -- 親2の子供は三人だから、各々の子に 200/3 = 66 を加算する。 # 4, 86 # 5, 96 # 6, 410 -- 親3の子供は一人だから、400 をそのまま加算する。 # # という結果を得たい。 # 要するに、親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい。 # SQL で出来ます? # # 親テーブル(1, 100). 親テーブル(2, 200). 親テーブル(3, 400). 子テーブル(1, 1, 10). 子テーブル(2, 1, 20). 子テーブル(3, 2, 10). 子テーブル(4, 2, 20). 子テーブル(5, 2, 30). 子テーブル(6, 3, 10). 親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい(_一覧) :- findall([_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額],子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額),_一覧). 子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- 子テーブル(_Id,_親Id,_資産), 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数), 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額). 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数) :- 親テーブル(_親Id,_親資産), 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数). 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数) :- 度数(子テーブル(_,_親Id,_),_自分を含めた兄弟人数). 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- _親の資産を子供に分配して各々の子供の資産と合わせた額 is _資産 + _親資産 // _自分を含めた兄弟人数. 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). % 以下のサイトは # 出典::SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). 指定した備品('PC'). 指定した備品('電話'). :- dynamic(指定した備品を全部持っているユーザー名/1). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する' :- findall(_備品,指定した備品(_備品),_備品名ならび), '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび) :- forall('所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名), assertz(指定した備品を全部持っているユーザー名(_ユーザー名))). '所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), 指定した備品を全部持っている(_備品名ならび,_ユーザーID). 指定した備品を全部持っている(_備品名ならび,_ユーザーID) :- forall(指定した備品を(_備品名ならび,_備品ID),持っている(_ユーザーID,_備品ID)). 指定した備品を(_備品名ならび,_備品ID) :- member(_備品名,_備品名ならび), 備品(_備品ID,_備品名). 持っている(_ユーザーID,_備品ID) :- 所持品(_ユーザーID,_備品ID). ?- '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'. ?- listing(指定した備品を全部持っているユーザー名). 指定した備品を全部持っているユーザー名(hoge). 指定した備品を全部持っているユーザー名(fuga). ?- % 以下のサイトは # 出典::SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). 指定した備品('PC'). 指定した備品('電話'). :- dynamic(指定した備品を全部持っているユーザー名/1). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する' :- findall(_備品,指定した備品(_備品),_備品名ならび), '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび) :- forall('所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名), assertz(指定した備品を全部持っているユーザー名(_ユーザー名))). '所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), 指定した備品を全部持っている(_備品名ならび,_ユーザーID). 指定した備品を全部持っている(_備品名ならび,_ユーザーID) :- forall(指定した備品を(_備品名ならび,_備品ID),持っている(_ユーザーID,_備品ID)). 指定した備品を(_備品名ならび,_備品ID) :- member(_備品名,_備品名ならび), 備品(_備品ID,_備品名). 持っている(_ユーザーID,_備品ID) :- 所持品(_ユーザーID,_備品ID). ?- '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'. ?- listing(指定した備品を全部持っているユーザー名). 指定した備品を全部持っているユーザー名(hoge). 指定した備品を全部持っているユーザー名(fuga). ?- % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #984 # ・SQL Server2008R2Express # テーブルデータ # ・2012-08-01 11:35:00, りんご, 1 # ・2012-08-01 16:22:00, みかん, 2 # ・2012-08-02 13:54:00, りんご, 2 # ・2012-08-02 14:32:00, りんご, 1 # ・2012-08-04 16:22:00, みかん, 3 # # ・欲しい結果 # 2012-08-01 # 2012-08-02 # 2012-08-04 # # ・説明 # 件数に関係なく売り上げがあった日だけのリストが欲しいのですが # うまい方法あるでしょうか # # 売上('2012-08-01 11:35:00', りんご, 1 ). 売上('2012-08-01 16:22:00', みかん, 2 ). 売上('2012-08-02 13:54:00', りんご, 2 ). 売上('2012-08-02 14:32:00', りんご, 1 ). 売上('2012-08-04 16:22:00', みかん, 3 ). 件数に関係なく売り上げがあった日(_売上のあった日) :- 売上のあった日を選ぶ(_売上のあった日候補日リスト), 実際に売上のあった日(_売上のあった日候補日リスト,_売上のあった日). 売上のあった候補日を選ぶ(_売上のあった候補日リスト) :- setof(_年月日,[_年月日] ^ 売上のあった日(_年月日),_売上のあった候補日リスト). 売上のあった日(_年月日) :- 売上(_日付時刻,_,_件数), 日付時刻から年月日を切り取る(_日付時刻,_年月日). 日付時刻から年月日を切り取る(_日付時刻,_年月日) :- sub_atom(_日付時刻,0,10,_,_年月日). 実際に売上のあった日(_売上のあった日候補日リスト,_年月日) :- member(_年月日,_売上のあった日候補日リスト), 合計件数を得る(_年月日,_合計件数), _合計件数 > 0. 合計件数を得る(_年月日,_合計件数) :- findsum(_件数,売上の件数を得る(_年月日,_件数),_合計件数). 売上の件数を得る(_年月日,_件数) :- 売上(_日付時刻,_,_件数), 日付時刻から年月日を切り取る(_日付時刻,_年月日). findsum(A,B,C) :- findall(A,B,L), sum_list(L,C). % 以下のサイトは # 出題場所 :: http://peace.2ch.net/test/read.cgi/db/1402919549/310 # SQLServer2012です # 日々の売上の合計が一定額を越えた日を知るにはどうすればいいでしょうか? # # 10/1 |\100 # 10/2 |\200 # 10/3 |\300 # 10/4 |\200 # 10/5 |\400 # 10/6 |\100 # # 上記で\1000を越えた日=10/5と出したいです # 売上(10/1,100). 売上(10/2,200). 売上(10/3,300). 売上(10/4,200). 売上(10/5,400). 売上(10/6,100). '日々の売上の合計が一定額を越えた日を知る'(_一定額,_日々の売上の合計が一定額を越えた日) :- 日付を鍵とする(_日付ならび), 日々の売上の合計が一定額を越えた日(_一定額,_日付ならび,_日々の売上の合計,_日々の売上の合計が一定額を越えた日). 日付を鍵とする(_日付ならび) :- setof(_日付,[_日付,_売上] ^ 売上(_日付,_売上),_日付ならび). 日々の売上の合計が一定額を越えた日(_一定額,_日付ならび,_日々の売上の合計,_日々の売上の合計が一定額を越えた日) :- '日々の売上の合計'(_日付ならび,_日々の,_日々の売上の合計), 一定額を越えた日(_一定額,_日々の,_日々の売上の合計,_日々の売上の合計が一定額を越えた日),!. '日々の売上の合計'(_日付ならび,_日々の,_日々の売上の合計) :- 日々の(_日付ならび,_日々の), 売上の合計(_日々の,_日々の売上の合計). 日々の(_日付ならび,_日々の) :- append(_日々の,_,_日付ならび). 売上の合計(_日々の,_日々の売上の合計) :- findsum(_売上,( 日々の売上(_日々の,_売上)),_日々の売上の合計). 日々の売上(_日々の,_売上) :- member(_日付,_日々の), 売上(_日付,_売上). 一定額を越えた日(_一定額,_日々の,_日々の売上の合計,_日々の売上の合計が一定額を越えた日) :- 一定額を越えた(_一定額,_日々の売上の合計), 日(_日々の,_日々の売上の合計が一定額を越えた日). 一定額を越えた(_一定額,_日々の売上の合計) :- _日々の売上の合計 > _一定額. 日(_日々の,_日々の売上の合計が一定額を越えた日) :- last(_日々の,_日々の売上の合計が一定額を越えた日). findsum(A,P,Sum) :- findall(A,P,L), sum_list(L,Sum). % 以下のサイトは # 出典::SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). 指定した備品('PC'). 指定した備品('電話'). :- dynamic(指定した備品を全部持っているユーザー名/1). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する' :- findall(_備品,指定した備品(_備品),_備品名ならび), '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび). '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'(_備品名ならび) :- forall('所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名), assertz(指定した備品を全部持っているユーザー名(_ユーザー名))). '所持品/2,備品/2から指定した備品を全部持っているユーザー名を取得する'(_備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), 指定した備品を全部持っている(_備品名ならび,_ユーザーID). 指定した備品を全部持っている(_備品名ならび,_ユーザーID) :- forall(指定した備品を(_備品名ならび,_備品ID),持っている(_ユーザーID,_備品ID)). 指定した備品を(_備品名ならび,_備品ID) :- member(_備品名,_備品名ならび), 備品(_備品ID,_備品名). 持っている(_ユーザーID,_備品ID) :- 所持品(_ユーザーID,_備品ID). ?- '所持品/2,備品/2から指定した備品、例えばPCと電話を両方持っているユーザーを取得して、指定した備品を全部持っているユーザー名/1として登録する'. ?- listing(指定した備品を全部持っているユーザー名). 指定した備品を全部持っているユーザー名(hoge). 指定した備品を全部持っているユーザー名(fuga). ?- % 以下のサイトは # 出典::SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(_備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), 指定した備品を全部持っている(_備品名ならび,_ユーザーID). 指定した備品を全部持っている(_備品名ならび,_ユーザーID) :- forall(指定した備品を(_備品名ならび,_備品ID),持っている(_ユーザーID,_備品ID)). 指定した備品を(_備品名ならび,_備品ID) :- member(_備品名,_備品名ならび), 備品(_備品ID,_備品名). 持っている(_ユーザーID,_備品ID) :- 所持品(_ユーザーID,_備品ID). ?- '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(['PC',電話],_ユーザー名). _ユーザー名 = hoge ; _ユーザー名 = fuga . ?- % 以下のサイトは # 出典::SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(_備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), 指定した備品を全部持っている(_備品名ならび,_ユーザーID). 指定した備品を全部持っている(_備品名ならび,_ユーザーID) :- forall(指定した備品を(_備品名ならび,_備品ID),持っている(_ユーザーID,_備品ID)). 指定した備品を(_備品名ならび,_備品ID) :- member(_備品名,_備品名ならび), 備品(_備品ID,_備品名). 持っている(_ユーザーID,_備品ID) :- 所持品(_ユーザーID,_備品ID). ?- '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(['PC',電話],_ユーザー名). _ユーザー名 = hoge ; _ユーザー名 = fuga . ?- % 以下のサイトは # 出題場所 :: http://peace.2ch.net/test/read.cgi/db/1402919549/310 # SQLServer2012です # 日々の売上の合計が一定額を越えた日を知るにはどうすればいいでしょうか? # # 10/1 |\100 # 10/2 |\200 # 10/3 |\300 # 10/4 |\200 # 10/5 |\400 # 10/6 |\100 # # 上記で\1000を越えた日=10/5と出したいです # 売上(10/1,100). 売上(10/2,200). 売上(10/3,300). 売上(10/4,200). 売上(10/5,400). 売上(10/6,100). '日々の売上の合計が一定額を越えた日を知る'(_一定額,_日々の売上の合計が一定額を越えた日) :- 日付を鍵とする(_日付ならび), 日々の売上の合計が一定額を越えた日(_一定額,_日付ならび,_日々の売上の合計,_日々の売上の合計が一定額を越えた日). 日付を鍵とする(_日付ならび) :- setof(_日付,[_日付,_売上] ^ 売上(_日付,_売上),_日付ならび). 日々の売上の合計が一定額を越えた日(_一定額,_日付ならび,_日々の売上の合計,_日々の売上の合計が一定額を越えた日) :- '日々の売上の合計'(_日付ならび,_日々の,_日々の売上の合計), 一定額を越えた日(_一定額,_日々の,_日々の売上の合計,_日々の売上の合計が一定額を越えた日),!. '日々の売上の合計'(_日付ならび,_日々の,_日々の売上の合計) :- 日々の(_日付ならび,_日々の), 売上の合計(_日々の,_日々の売上の合計). 日々の(_日付ならび,_日々の) :- append(_日々の,_,_日付ならび). 売上の合計(_日々の,_日々の売上の合計) :- findsum(_売上,( 日々の売上(_日々の,_売上)),_日々の売上の合計). 日々の売上(_日々の,_売上) :- member(_日付,_日々の), 売上(_日付,_売上). 一定額を越えた日(_一定額,_日々の,_日々の売上の合計,_日々の売上の合計が一定額を越えた日) :- 一定額を越えた(_一定額,_日々の売上の合計), 日(_日々の,_日々の売上の合計が一定額を越えた日). 一定額を越えた(_一定額,_日々の売上の合計) :- _日々の売上の合計 > _一定額. 日(_日々の,_日々の売上の合計が一定額を越えた日) :- last(_日々の,_日々の売上の合計が一定額を越えた日). findsum(A,P,Sum) :- findall(A,P,L), sum_list(L,Sum). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/493 # SQLServer2008R2です. # テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(float型) # の3カラムからなります.各DATEの各CODEに対して過去3か月分の総和を算出したいと思います. # 元テーブル # DATE, CODE, VALUE # .... # 200101, AAA, 1 # 200102, AAA, 2 # 200103, AAA, 3 # 200104, AAA, 4 # 200101, BBB, 1 # .... # # 欲しい結果 # 200103, AAA, 6 # 200104, AAA, 9 # ....... # # 下記のようなSQLを書いたのですが,同じ結果の行が12か月分でてきます. # 何処を修正すればよろしいでしょうか?もしくは全然違うSQLでしょうか? # # SELECT A.DATE, A.CODE, SUM(B.VALUE) OVER (PARTITION BY B.DATE, B.CODE) # FROM TABLE A, TABLE B # WHERE A.CODE=B.CODE AND B.DATE>=A.DATE AND B.DATE>=(A.DATEの3か月前←計算式が長いので省略です) # ORDER BY A.DATE, A.CODE # # よろしくお願いいたします. # 'A'(200101,'AAA',1). 'A'(200102,'AAA',2). 'A'(200103,'AAA',3). 'A'(200104,'AAA',4). 'A'(200101,'BBB',1). 過去三ヶ月の集計(_過去三ヶ月の集計ならび) :- '_DATE,_CODEを鍵として、過去三ヶ月の_VALUEの集計'(_過去三ヶ月の集計ならび). '_DATE,_CODEを鍵として、過去三ヶ月の_VALUEの集計'(_過去三ヶ月の集計ならび) :- '_DATE,_CODEを鍵とする'(_DATE_CODEならび), findall([_DATE,_CODE,_集計],( '過去三ヶ月の全ての_DATE,_CODEに対して、_VALUEを集約する'(_DATE,_CODE,_DATE_CODEならび,_集計)),_過去三ヶ月の集計ならび). '_DATE,_CODEを鍵とする'(_DATE_CODEならび) :- setof([_DATE,_CODE],[_DATE,_CODE,_VALUE] ^ 'A'(_DATE,_CODE,_VALUE),_DATE_CODEならび). '過去三ヶ月の全ての_DATE,_CODEに対して、_VALUEを集約する'(_DATE,_CODE,_DATE_CODEならび,_集計) :- member([_DATE,_CODE],_DATE_CODEならび), '過去三ヶ月の_DATE,_CODEで_VAULEを集約'(_DATE,_CODE,_集計). '過去三ヶ月の_DATE,_CODEで_VAULEを集約'(_DATE,_CODE,_集計) :- '3ヶ月前の起点月'(_DATE,_3ヶ月前の起点月), findsum(_VALUE,( テーブルデータは過去三ヶ月の範囲内(_DATE,_CODE,_3ヶ月前の起点月,_VALUE)),_集計). テーブルデータは過去三ヶ月の範囲内(_DATE,_CODE,_3ヶ月前の起点月,_VALUE) :- 'A'(_DATE_1,_CODE,_VALUE), between(_3ヶ月前の起点月,_DATE,_DATE_1). '3ヶ月前の起点月'(_今月,_3ヶ月前の起点年月) :- 今月が1月から3月の範囲では前年となる(_今月,_3ヶ月前の起点年月),!. '3ヶ月前の起点月'(_今月,_3ヶ月前の起点年月) :- 今月が4月から12月の範囲では今年となる(_今月,_3ヶ月前の起点年月). 今月が1月から3月の範囲では前年となる(_今月,_3ヶ月前の起点月) :- M is _今月 mod 100, M =< 3, _3ヶ月前の起点月 is _今月 - 100 + 9. 今月が4月から12月の範囲では今年となる(_今月,_3ヶ月前の起点月) :- _3ヶ月前の起点月 is _今月 - 3. findsum(A,B,C) :- findall(A,B,L), sum_list(L,C). % 以下のサイトは # # 出典::SQL質疑応答スレ 11問目 #535 # # 関連性がないけど取得したデータ型が同じ2つのSELECT文を結合させるにはどうしたらいいでしょうか? # # SELECT 1 # SELECT int_column AS A, timestamp_column AS B FROM table1 # # A     B # 10 2011-07-11 # # SELECT 2 # SELECT int_column AS A timestamp_column AS B FROM table2 # # A     B # 5  2011-07-10 # 10 2011-07-13 # # これをA-Bの順番にソートして # # A     B # 5  2011-07-10 # 10  2011-07-11 # 10  2011-07-13 # # こんな感じの1つのテーブルにしたいのですが、よろしくお願いします。 # # :- dynamic(table3/2). '関連性がないけど取得したデータ型が同じ2つのSELECT文を結合する これをA-Bの順番にソートして1つのテーブルにしたい'(_順番にソートして結合された表) :- '関連性がないけど取得したデータ型が同じ2つのSELECT文を結合する'(_結合された表), 'これをA-Bの順番にソートして1つのテーブルにしたい'(_順番にソートして結合された表). '関連性がないけど取得したデータ型が同じ2つのSELECT文を結合する'(LL3) :- 同じ形式の照会で得られた(LL1,LL2), '2つを結合する'(LL1,LL2,LL3). 同じ形式の照会で得られた(LL1,LL2) :- 'table1をならびに取得する'(LL1), 'table2をならびに取得する'(LL2). 'table1をならびに取得する'(LL1) :- findall([_table1_A,_table1_B],table1(_table1_A,_table1_B),LL1). 'table2をならびに取得する'(LL2) :- findall([_table2_A,_table2_B],table2(_table2_A,_table2_B),LL2). '2つを結合する'(LL1,LL2,LL3) :- append(LL1,LL2,LL3). 'これをA-Bの順番にソートして1つのテーブルにしたい'(_結合された表,_順番にソートして結合された表) :- sort(_結合された表,_順番にソートして結合された表), '1つのテーブルにしたい'(_順番にソートして結合された表). '1つのテーブルにしたい'(_順番にソートして結合された表) :- forall( member([_table3_A,_table3_B],_順番にソートして結合された表), assertz(table3(_table3_A,_table3_B))). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #689 # すみません。 # 高専機械科卒なんですがお願いいたします。 # # 以下のようなテーブルにて、あかさたなでGROUP BYしてそれぞれの件数を出力できないかどうか悩んでおります。 # # CREATE TABLE `name_list` ( # kanji varchar(64), # yomi varchar(64) # ) # # INSERT INTO name_list (kanji,yomi) VALUES # ('安部','あべ'), # ('井口','いぐち'), # ('臼井','うすい'), # ('江本','えもと'), # ('小川','おがわ'), # ('柿本','かきもと'), # ('木島','きじま'), # ('九条','くじょう'), # ('毛森','けもり'), # ('小島','こじま'), # ('佐藤','さとう'), # ('しみず','')・・・・・・ # # 勿論、各頭文字で一件ずつじゃないのですが # これを # # あ行 5件 # か行 5件 # さ行 8件 # # のように集計をかけたいと思っておりますが # よい方法が思いつかず… # # 出力結果は、例でして出力した左側のフィールドはなんでもOKです。 # 右側のあかさたな行のそれぞれのレコード数がチェックできればOKです。 # # なにとぞよろしくお願いいたします。 # 名簿(安部,あべ). 名簿(井口,いぐち). 名簿(臼井,うすい). 名簿(江本,えもと). 名簿(小川,おがわ). 名簿(柿本,かきもと). 名簿(木島,きじま). 名簿(九条,くじょう). 名簿(毛森,けもり). 名簿(小島,こじま). 名簿(佐藤,さとう). 名簿(しみず,''). '各頭文字で一件ずつじゃないのですが、これを あ行 5件 か行 5件 さ行 8件 のように集計をかけたい'(_あかさたなはまやらわん,_件数) :- あかさたなはまやらわん(_あかさたなはまやらわん), '件数(但し0件は除く)'('名簿のひらがな読みの最初の文字は_あかさたなはまやらわんの行範囲'(_あかさたなはまやらわん),_件数). '名簿のひらがな読みの最初の文字は_あかさたなはまやらわんの行範囲'(_あかさたなはまやらわん) :- 名簿のひらがな読みの最初の文字は(_ひらがな読みの最初の文字), あかさたなはまやらわん(_あかさたなはまやらわん,_ひらがな読みの最初の文字). 名簿のひらがな読みの最初の文字は(_ひらがな読みの最初の文字) :- 名簿(_,_ひらがな読み), sub_atom(_ひらがな読み,0,1,_,_ひらがな読みの最初の文字). '件数(但し0件は除く)'(_目標,_件数) :- findall(1,_目標,[_|L]), length([_|L],_件数). あかさたなはまやらわん(あ). あかさたなはまやらわん(か). あかさたなはまやらわん(さ). あかさたなはまやらわん(た). あかさたなはまやらわん(な). あかさたなはまやらわん(は). あかさたなはまやらわん(ま). あかさたなはまやらわん(や). あかさたなはまやらわん(ら). あかさたなはまやらわん(わ). あかさたなはまやらわん(ん). あかさたなはまやらわん(あ,あ). あかさたなはまやらわん(あ,ぃ). あかさたなはまやらわん(あ,い). あかさたなはまやらわん(あ,ぅ). あかさたなはまやらわん(あ,う). あかさたなはまやらわん(あ,ぇ). あかさたなはまやらわん(あ,え). あかさたなはまやらわん(あ,ぉ). あかさたなはまやらわん(あ,お). あかさたなはまやらわん(か,か). あかさたなはまやらわん(か,が). あかさたなはまやらわん(か,き). あかさたなはまやらわん(か,ぎ). あかさたなはまやらわん(か,く). あかさたなはまやらわん(か,ぐ). あかさたなはまやらわん(か,け). あかさたなはまやらわん(か,げ). あかさたなはまやらわん(か,こ). あかさたなはまやらわん(か,ご). あかさたなはまやらわん(さ,さ). あかさたなはまやらわん(さ,ざ). あかさたなはまやらわん(さ,し). あかさたなはまやらわん(さ,じ). あかさたなはまやらわん(さ,す). あかさたなはまやらわん(さ,ず). あかさたなはまやらわん(さ,せ). あかさたなはまやらわん(さ,ぜ). あかさたなはまやらわん(さ,そ). あかさたなはまやらわん(さ,ぞ). あかさたなはまやらわん(た,た). あかさたなはまやらわん(た,だ). あかさたなはまやらわん(た,ち). あかさたなはまやらわん(た,ぢ). あかさたなはまやらわん(た,っ). あかさたなはまやらわん(た,つ). あかさたなはまやらわん(た,づ). あかさたなはまやらわん(た,て). あかさたなはまやらわん(た,で). あかさたなはまやらわん(た,と). あかさたなはまやらわん(た,ど). あかさたなはまやらわん(な,な). あかさたなはまやらわん(な,に). あかさたなはまやらわん(な,ぬ). あかさたなはまやらわん(な,ね). あかさたなはまやらわん(な,の). あかさたなはまやらわん(は,は). あかさたなはまやらわん(は,ば). あかさたなはまやらわん(は,ぱ). あかさたなはまやらわん(は,ひ). あかさたなはまやらわん(は,び). あかさたなはまやらわん(は,ぴ). あかさたなはまやらわん(は,ふ). あかさたなはまやらわん(は,ぶ). あかさたなはまやらわん(は,ぷ). あかさたなはまやらわん(は,へ). あかさたなはまやらわん(は,べ). あかさたなはまやらわん(は,ぺ). あかさたなはまやらわん(は,ほ). あかさたなはまやらわん(は,ぼ). あかさたなはまやらわん(は,ぽ). あかさたなはまやらわん(ま,ま). あかさたなはまやらわん(ま,み). あかさたなはまやらわん(ま,む). あかさたなはまやらわん(ま,め). あかさたなはまやらわん(ま,も). あかさたなはまやらわん(や,ゃ). あかさたなはまやらわん(や,や). あかさたなはまやらわん(や,ゅ). あかさたなはまやらわん(や,ゆ). あかさたなはまやらわん(や,ょ). あかさたなはまやらわん(や,よ). あかさたなはまやらわん(ら,ら). あかさたなはまやらわん(ら,り). あかさたなはまやらわん(ら,る). あかさたなはまやらわん(ら,れ). あかさたなはまやらわん(ら,ろ). あかさたなはまやらわん(わ,ゎ). あかさたなはまやらわん(わ,わ). あかさたなはまやらわん(わ,ゐ). あかさたなはまやらわん(わ,ゑ). あかさたなはまやらわん(わ,を). あかさたなはまやらわん(な,ん). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/689 # # すみません。 # 高専機械科卒なんですがお願いいたします。 # # 以下のようなテーブルにて、あかさたなでGROUP BYしてそれぞれの件数を出力できないかどうか悩んでおります。 # # CREATE TABLE `name_list` ( # kanji varchar(64), # yomi varchar(64) # ) # # INSERT INTO name_list (kanji,yomi) VALUES # ('安部','あべ'), # ('井口','いぐち'), # ('臼井','うすい'), # ('江本','えもと'), # ('小川','おがわ'), # ('柿本','かきもと'), # ('木島','きじま'), # ('九条','くじょう'), # ('毛森','けもり'), # ('小島','こじま'), # ('佐藤','さとう'), # ('しみず','')・・・・・・ # # 勿論、各頭文字で一件ずつじゃないのですが # これを # # あ行 5件 # か行 5件 # さ行 8件 # # のように集計をかけたいと思っておりますが # よい方法が思いつかず… # # 出力結果は、例でして出力した左側のフィールドはなんでもOKです。 # 右側のあかさたな行のそれぞれのレコード数がチェックできればOKです。 # # なにとぞよろしくお願いいたします。 # 名簿(安部,あべ). 名簿(井口,いぐち). 名簿(臼井,うすい). 名簿(江本,えもと). 名簿(小川,おがわ). 名簿(柿本,かきもと). 名簿(木島,きじま). 名簿(九条,くじょう). 名簿(毛森,けもり). 名簿(小島,こじま). 名簿(佐藤,さとう). 名簿(しみず,''). '各頭文字で一件ずつじゃないのですが、これを あ行 5件 か行 5件 さ行 8件 のように集計をかけたい'(_行,_件数) :- append(_,[_行|R],[あ,か,さ,な,ま,や,ら,わ,ん]), '件数(但し0件は除く)'('_行の読み範囲の中に名簿の_ひらがな読みは入っている'(_行,R),_件数). '_行の読み範囲の中に名簿の_ひらがな読みは入っている'(_行,_残りの行) :- '名簿の_ひらがな読みの一字目は行の範囲'(_行,_残りの行). '名簿の_ひらがな読みの一字目は行の範囲'(_行,[]) :- '名簿の_ひらがな読みの一字目は「ん」'. '名簿の_ひらがな読みの一字目は行の範囲'(_行,[_次の行|_]) :- '名簿の一字目は行の範囲'(_行,_次の行). '名簿の一字目は行の範囲'(_行,_次の行) :- 名簿(_,_ひらがな読み), _ひらがな読み @>= _行, _ひらがな読み @< _次の行. '名簿の_ひらがな読みの一字目は「ん」' :- 名簿(_,_ひらがな読み), sub_atom(_ひらがな読み,0,1,_,ん). '件数(但し0件は除く)'(_目標,_件数) :- findall(1,_目標,[_|L]), length([_|L],_件数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/689 # # すみません。 # 高専機械科卒なんですがお願いいたします。 # # 以下のようなテーブルにて、あかさたなでGROUP BYしてそれぞれの件数を出力できないかどうか悩んでおります。 # # CREATE TABLE `name_list` ( # kanji varchar(64), # yomi varchar(64) # ) # # INSERT INTO name_list (kanji,yomi) VALUES # ('安部','あべ'), # ('井口','いぐち'), # ('臼井','うすい'), # ('江本','えもと'), # ('小川','おがわ'), # ('柿本','かきもと'), # ('木島','きじま'), # ('九条','くじょう'), # ('毛森','けもり'), # ('小島','こじま'), # ('佐藤','さとう'), # ('しみず','')・・・・・・ # # 勿論、各頭文字で一件ずつじゃないのですが # これを # # あ行 5件 # か行 5件 # さ行 8件 # # のように集計をかけたいと思っておりますが # よい方法が思いつかず… # # 出力結果は、例でして出力した左側のフィールドはなんでもOKです。 # 右側のあかさたな行のそれぞれのレコード数がチェックできればOKです。 # # なにとぞよろしくお願いいたします。 # 名簿(安部,あべ). 名簿(井口,いぐち). 名簿(臼井,うすい). 名簿(江本,えもと). 名簿(小川,おがわ). 名簿(柿本,かきもと). 名簿(木島,きじま). 名簿(九条,くじょう). 名簿(毛森,けもり). 名簿(小島,こじま). 名簿(佐藤,さとう). 名簿(しみず,''). '各頭文字で一件ずつじゃないのですが、これを あ行 5件 か行 5件 さ行 8件 のように集計をかけたい'(_行,_件数) :- append(_,[_行,_次の行|_],[あ,か,さ,た,な,は,ま,や,ら,わ,ん]), '件数(但し0件は除く)'('_行の読み範囲の中に名簿の_ひらがな読みは入っている'(_行,_次の行),_件数). '_行の読み範囲の中に名簿の_ひらがな読みは入っている'(_行,_次の行) :- 名簿(_,_ひらがな読み), _ひらがな読み @>= _行, _ひらがな読み @< _次の行. '件数(但し0件は除く)'(_目標,_件数) :- findall(1,_目標,[_|L]), length([_|L],_件数). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #617 # MySQLを使っています、よろしくお願いします。 # たとえですがkaimonoというテーブルをつくり、名前・品物・値段という項目を作りました # # 名前 品物 値段 # 佐藤 味噌 500 # 田中 米  1000 # 鈴木 水  200 # # 佐藤の味噌の値段(500)を、値段の列にすべて適応させて500と変更するにはどうしたらよいでしょうか。 # 今回は500としたのですが、実際は数値が変動していていくらなのかわからない状態です # :- dynamic(買い物/3). 買い物(佐藤,味噌,500). 買い物(田中,米,1000). 買い物(鈴木,水,200). '佐藤の味噌の値段(500)を、値段の列にすべて適応させて500と変更するにはどうしたらよいでしょうか。今回は500としたのですが、実際は数値が変動していていくらなのかわからない状態です' :- 佐藤の味噌の値段(_佐藤の味噌の値段), 値段の列にすべて適応させて変更する(_佐藤の味噌の値段). 佐藤の味噌の値段(_佐藤の味噌の値段) :- 買い物(佐藤,味噌,_佐藤の味噌の値段),!. 値段の列にすべて適応させて変更する(_佐藤の味噌の値段) :- '_名前_品物ならびを得る'(_名前_品物ならび), すべて適応させて変更する(_名前_品物ならび,_佐藤の味噌の値段). '_名前_品物ならびを得る'(_名前_品物ならび) :- findall([_名前,_品物],( 買い物(_名前,_品物,_)),_名前_品物ならび). すべて適応させて変更する(_名前_品物ならび,_佐藤の味噌の値段) :- forall(member([_名前,_品物],_名前_品物ならび), once(適応させて変更する(_名前,_品物,_佐藤の味噌の値段))). 適応させて変更する(_名前,_品物,_佐藤の味噌の値段) :- retract(買い物(_名前,_品物,_)), assertz(買い物(_名前,_品物,_佐藤の味噌の値段)). % 以下のサイトは # 出典 :: SQL質疑応答スレ 13問目 # SQLに関して質問です。MySQL5.1.41です。 # # 【チームテーブル(team)】 # -------------------- # チームID  チーム名 # -------------------- # 1      巨人 # 2      阪神 # 3      中日 # # 【選手テーブル(player)】 # -------------------------------------- # 選手ID  チームID  選手名  背番号 # -------------------------------------- # 1     1      阿部   10 # 2     1      杉内   18 # 3     2      金本   6 # 4     2      鳥谷   1 # 5     3      岩瀬   13 # 6     3      谷繁   27 # # この条件で、各チームから背番号最少の選手を抽出するのが目的です。 # 結果イメージは、 # # ---------------------------- # チーム名  選手名  背番号 # ---------------------------- # 巨人    阿部    10 # 阪神    鳥谷    1 # 中日    岩瀬    13 # # です。SQLで # SELECT チーム名, 選手名, 背番号 FROM team LEFT JOIN player USING (チームID) WHERE MIN(背番号); # ではエラーになってしまいました。 # # ご教示宜しくお願いいたします。 # # チーム(1,巨人). チーム(2,阪神). チーム(3,中日). 選手(1,1,阿部,10). 選手(2,1,杉内,18). 選手(3,2,金本,6). 選手(4,2,鳥谷,1). 選手(5,3,岩瀬,13). 選手(6,3,谷繁,27). 各チームから背番号最少の選手を抽出する(_チーム,_選手名,_チーム最小背番号) :- チーム(_チームID,_チーム), 背番号最少の選手を抽出する(_チームID,_選手名,_チーム最小背番号). 背番号最少の選手を抽出する(_チームID,_選手名,_チーム最小背番号) :- 選手を抽出する(_チームID,_選手名,_チーム最小背番号,_残りならび), 背番号最少の(_残りならび,_チーム最小背番号). 選手を抽出する(_チームID,_選手名,_チーム最小背番号,_残りならび) :- findall([_背番号,_選手名],選手(_,_チームID,_選手名,_背番号),_背番号_選手名ならび), select([_チーム最小背番号,_選手名],_背番号_選手名ならび,_残りならび). 背番号最少の(_残りならび,_チーム最小背番号) :- forall(member([_背番号,_],_残りならび),_背番号 @>= _チーム最小背番号). % 以下のサイトは # SQL質疑応答スレ 11問目 #730 # MySQLで、以下のような2つのテーブルがあり、parent_idはparentの外部キーとなってます。 # # parent # id p_value # 1 AAA # 2 BBB # # children # parent_id c_value # 1 aaa # 1 bbb # 1 ccc # 2 ddd # 2 eee # # これを # # parent_id p_value c_value # 1 AAA (aaa, bbb, ccc) # 2 BBB (ddd, eee) # # のような形で取り出すことはできますか? # GROUP BYでparent_idでまとめることはできたのですが、c_valueをまとめて取り出す方法がわかりません。 # # parent(1,'AAA'). parent(2,'BBB'). children(1,aaa). children(1,bbb). children(1,ccc). children(2,ddd). children(2,eee). 結合情報を一行に纏める(_parent_id,_p_value,_c_valueならび) :- 'parentから鍵_parent_idならびを得る'(_parent_idならび), '鍵によって結合してparentからp_valueをchildrenからc_valueならびを得る'(_parent_id,_pvalue,_c_valueならび). 'parentから鍵_parent_idならびを得る'(_parent_idならび) :- setof(_parent_id,( [_parent_id,_p_value] ^ parent(_parent_id,_p_value)),_parent_idならび), '鍵によって結合してparentからp_valueをchildrenからc_valueならびを得る'(_parent_id,_pvalue,_c_valueならび) :- member(_parent_id,_parent_idならび), parentからp_valueをchildrenからc_valueならびを得る(_parent_id,_p_value,_c_valueならび). parentからp_valueをchildrenからc_valueならびを得る(_parent_id,_p_value,_c_valueならび) :- parentからp_valueを(_parent_id,_p_value), childrenからc_valueならびを得る(_parent_id,_c_valueならび). parentからp_valueを(_parent_id,_p_value) :- parent(_parent_id,_p_value). childrenからc_valueならびを得る(_parent_id,_c_valueならび) :- findall(_c_value,( children(_parent_id,_c_value)),_c_valueならび). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #365 # ・DB名:Firebird1.03 # ・テーブル #  ■メイン #   受注番号 受注日 注文社 #   11    2011/12/20 A社 #   12    2011/12/21 B社 #  ■サブ #   連番 受注番号 商品コード 数 #   50  11    A10    100 #   51  11    C30    20 #   52  12    A10    10 #  ■商品 #   商品コード 商品名 カテゴリ 納品番号(商品ごとで重複していません) #   A10     コート 洋服   100 #   C30     帯   和服   504 # # メインの受注番号とサブの受注番号、サブの商品コードと商品の商品コードで # リンクしています。 # # 欲しい結果 # 受注日の期間(いつからいつまで)と、商品のカテゴリと納品番号で、 # 受注の全内容(商品)が知りたいです。 # 受注日:2011/12/01から12/31まで # カテゴリ:洋服 納品番号:100で検索をして # # 受注番号 受注日 注文者 商品コード 商品名 数量 # 11    2011/12/20 A社 A10    コート 100 # 11    2011/12/20 A社 C30    帯   20----★ # 12    2011/12/21 B社 A10    コート 10 # ★受注の全内容が知りたいので、該当する受注番号のサブはすべて表示 # したい。メインの内容は重複表示となります。 # # 丸投げですみませんが、どなたかSQL文をお願いできませんでしょうか。 # テーブルが3つになるとどうしてよいものかわからないです。 # よろしくお願いします。 # # # メイン(11,2011/12/20,'A社'). メイン(12,2011/12/21,'B社'). サブ(50,11,'A10',100). サブ(51,11,'C30',20). サブ(52,12,'A10',10). 商品('A10',コート,洋服,100). 商品('C30',帯,和服,504). '受注日の期間(いつからいつまで)と、商品の商品カテゴリと納品番号で、受注の全内容(商品)が知りたい'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号) :- '受注番号候補を得て、それを鍵に、データベースから選択する'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,LL1), 受注番号順に表示する(LL1). '受注番号候補を得て、それを鍵に、データベースから選択する'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,LL1) :- 受注番号候補を得る(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号ならび), 'それを鍵に、データベースから選択する'(_受注番号ならび,LL1). 受注番号候補を得る(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号ならび) :- setof(_受注番号, [_受注番号,_受注日,_注文社,_受注日,_受注日下限,_受注日上限,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号] ^ ( '受注日範囲のメインの受注番号からサブ・商品を結合可能な受注番号'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号)),_受注番号ならび). '受注日範囲のメインの受注番号からサブ・商品を結合可能な受注番号'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号,_受注番号) :- 受注日範囲のメインの受注番号から(_受注日下限,_受注日上限,_受注番号,_受注日,_注文社), 'サブ・商品を結合可能な受注番号'(_受注番号,_受注日,_注文社,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号). 受注日範囲のメインの受注番号から(_受注日下限,_受注日上限,_受注番号,_受注日,_注文社) :- メイン(_受注番号,_受注日,_注文社), _受注日 @>= _受注日下限, _受注日 @=< _受注日上限. 'サブ・商品を結合可能な受注番号'(_受注番号,_受注日,_注文社,_連番,_受注番号,_商品コード,_数量,_商品名,_商品カテゴリ,_納品番号) :- サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_商品カテゴリ,_納品番号). 'それを鍵に、データベースから選択する'(_受注番号ならび,LL1) :- findall([_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量],( append(_,[_受注番号|_],_受注番号ならび), 受注番号を鍵にデータベースからの選択(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量)),LL1). 受注番号を鍵にデータベースを結合(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量) :- メイン(_受注番号,_受注日,_注文社), サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_商品カテゴリ,_納品番号). 受注番号順に表示する(LL1) :- 整列(LL1,LL2), 表示する(LL2). 表示する(LL) :- 見出しを表示する, forall(append(_,[[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量]|_],LL), writef('%10l %8l %8c %8c %8c %14l %8r\n',[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量])). 見出しを表示する :- write('受注番号 受注日 注文者 商品コード 商品名 数量\n'). % 以下のサイトは # # データベースに在る一日分売上データを給油所別月別ファイルに追加保存する。 # 保存ファイルは例えば "志村_売上_201501.pro" のようなファイル名である。 # 給油所(志村,'300203'). 給油所(上野毛,'300206'). 給油所(横浜南,'370113'). 給油所(熊谷,'370105'). 給油所(けやき台,'370109'). 給油所(秩父21,'370111'). 給油所(狭山ヶ丘,'370112'). 売上保存(_保存月,_保存日) :- '保存日から入力年月日を得て、一日分のデータを売上保存ファイルに書き足す。'(_保存月,_保存日). '保存日から入力年月日を得て、一日分のデータを売上保存ファイルに書き足す。'(_保存月,_保存日) :- '保存日から入力年月日を得て、'(_保存日,_入力年月日), '一日分のデータを売上保存ファイルに書き足す。'(_保存月,_入力年月日). '保存日から入力時刻下限、上限を得て、'(_保存日,_入力年月日) :- '売上保存_年-_月-_日'(_保存日,_年,_月,_日), 売上保存_入力年月日(_年,_月,_日,_入力年月日). '売上保存_年-_月-_日'(_保存日,_年,_月,_日) :- sub_atom(_保存日,0,4,_,_年), sub_atom(_保存日,4,2,_,_月), sub_atom(_保存日,6,2,_,_日). 売上保存_入力年月日(_年,_月,_日,_入力年月日) :- atomic_list_concat([_年,'-',_月,'-',_日],_入力年月日). '一日分のデータを売上保存ファイルに書き足す。'(_保存月,_入力年月日) :- forall(売上保存の一日分の読み出し(_保存月,_入力年月日,_出力,_一日分データ), 売上保存の一日分データを書き出す(_出力,_一日分データ)). 売上保存の一日分の読み出し(_保存月,_入力年月日,_出力,_一日分データ) :- 出荷場所ファイルを追加モードで開く(_保存月,_出荷場所,_出力), データベースからの読み出し(_出荷場所,_入力年月日,_一日分データ). 出荷場所ファイルを追加モードで開く(_保存月,_出荷場所,_出力) :- 給油所(_給油所,_出荷場所), atomic_list_concat([_給油所,'_売上_',_保存月,'.pro'],_保存ファイル名), open(_保存ファイル名,append,_出力). データベースからの読み出し(_出荷場所,_入力年月日,_一日分データ) :- findall([_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20],( 売上(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20), 出荷場所と入力時刻が指定と一致する(_16,_出荷場所,_20,_入力年月日)),_一日分データ). 出荷場所と入力時刻が指定と一致する(_出荷場所,_出荷場所,_入力時刻,_入力年月日) :- sub_atom(_入力時刻,0,10,_,_入力年月日). 売上保存の一日分データを書き出す(_出力,[]) :- close(_出力). 売上保存の一日分データを書き出す(_出力,[]) :- 売上保存の一日分データを書き出して行く(_出力,_一日分データ). 売上保存の一日分データを書き出して行く(_出力,_一日分データ) :- 売上保存一行表示(_出力,_組), 売上保存の一日分データを書き出す(_出力,_残り). 売上保存一行表示(_出力,_組) :- _売上 =.. [売上|_組], format(_出力,'~w.\n',[_売上]). % 以下のサイトは # # データベースに在る一日分売上データを給油所別月別ファイルに追加保存する。 # 保存ファイルは例えば "志村_売上_201501.pro" のようなファイル名である。 # 売上保存(_保存月,_保存日) :- '保存日から入力時刻下限、上限を得る'(_保存日,_入力年月日), 売上保存の一日分の読み出し(_保存月,_入力年月日,_出力,_一日分データ,_残り), 売上保存の一日分データを書き出す(_出力,_一日分データ), _残り = []. '保存日から入力時刻下限、上限を得る'(_保存日,_入力年月日) :- '売上保存_年-_月-_日'(_保存日,_年,_月,_日), 売上保存_入力年月日(_年,_月,_日,_入力年月日). '売上保存_年-_月-_日'(_保存日,_年,_月,_日) :- sub_atom(_保存日,0,4,_,_年), sub_atom(_保存日,4,2,_,_月), sub_atom(_保存日,6,2,_,_日). 売上保存_入力年月日(_年,_月,_日,_入力年月日) :- atomic_list_concat([_年,'-',_月,'-',_日],_入力年月日). 売上保存の一日分の読み出し(_保存月,_入力年月日,_出力,_一日分データ,_残り) :- 出荷場所ファイルを追加モードで開く(_保存月,_出荷場所,_出力,_残り), データベースからの読み出し(_出荷場所,_入力年月日,_一日分データ). 出荷場所ファイルを追加モードで開く(_保存月,_出荷場所,_出力,_残り) :- append(_,[[_給油所,_出荷場所]|_残り],[[志村,'300203'],[上野毛,'300206'],[熊谷,'370105'],[けやき台,'370109'],[秩父21,'370111'],[狭山ヶ丘,'370112'],[横浜南,'370113']]), atomic_list_concat([_給油所,'_売上_',_保存月,'.pro'],_保存ファイル名), open(_保存ファイル名,append,_出力). データベースからの読み出し(_出荷場所,_入力年月日,_一日分データ) :- findall([_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20],( 売上(_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12,_13,_14,_15,_16,_17,_18,_19,_20), 出荷場所と入力時刻から組を得る(_16,_出荷場所,_20,_入力年月日)),_一日データ). 出荷場所と入力時刻から組を得る(_出荷場所,_出荷場所,_入力時刻,_入力年月日,_組) :- sub_atom(_入力時刻,0,10,_,_入力年月日). 売上保存の一日分データを書き出す(_出力,_一日分データ) :- append(_,[_組|_残り],_一日分データ), 売上保存一行表示(_出力,_組), 売上保存の一日分書き出しを完了する(_出力,_残り). 売上保存一行表示(_出力,_組) :- _売上 =.. [売上|_組], writeq(_出力,_売上), write(_出力,'.\n'). 売上保存の一日分書き出しを完了する(_出力,[]) :- close(_出力). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/669 # # oracleなんですが、次の表に # # 日付 数 # 1/1 5 # 1/2 2 # 1/3 -8 # 1/4 6 # 1/5 8 # # 残と繰越を計算して↓のようにしたいのですが # どのようなSQLにすればいいでしょうか?>< # # 日付 残 数 繰越 # 1/1 0 5 5 ←初日の残はゼロ、繰越=残+数 # 1/2 5 2 7 ←残=前日の繰越 # 1/3 7 -8 -1 # 1/4 0 6 6 ←前日の繰越がマイナスなら残はゼロに # 1/5 6 8 14 # # テーブル('1/1',5). テーブル('1/2',2). テーブル('1/3',-8). テーブル('1/4',6). テーブル('1/5',8). '初日(1/1)の残'(0). 'oracleなんですが、次の表に 日付 数 1/1 5 1/2 2 1/3 -8 1/4 6 1/5 8 残と繰越を計算して↓のようにしたいのです どのようなSQLにすればいいでしょうか?>< 日付 残 数 繰越 1/1 0 5 5 ←初日の残はゼロ、繰越=残+数 1/2 5 2 7 ←残=前日の繰越 1/3 7 -8 -1 1/4 0 6 6 ←前日の繰越がマイナスなら残はゼロに 1/5 6 8 14'(_日付,_残,_数,_繰越) :- findall([_日付,_数],テーブル(_日付,_数),_日付_数ならび), '初日(1/1)の残'(_初日の残), '残と繰越の計算'(_初日の残,_日付_数ならび,_日付,_残,_数,_繰越). '残と繰越の計算'(_前日の繰越,[[_日付_1,_数_1]|R],_日付,_残,_数,_繰越) :- '前日繰越と数から残、繰越を求める'(_前日の繰越,_数_1,_残_1,_繰越_1), '残と繰越を非決定性に計算'(_残_1,_日付_1,_数_1,R,_繰越_1,_日付,_残,_数,_繰越). '残と繰越を非決定性に計算'(_残,_日付,_数,_,_繰越,_日付,_残,_数,_繰越). '残と繰越を非決定性に計算'(_残_1,_,_,R,_繰越_1,_日付,_残,_数,_繰越) :- '残と繰越の計算'(_繰越_1,R,_日付,_残,_数,_繰越). '前日繰越と数から残、繰越を求める'(_前日の繰越,_数,_残,_繰越) :- '前日の繰越がマイナスなら残はゼロに、さもなくば、残=前日の繰越'(_前日の繰越,_残), _繰越 is _残 + _数. '前日の繰越がマイナスなら残はゼロに、さもなくば、残=前日の繰越'(_前日の繰越,_残) :- 前日の繰越がマイナスなら残はゼロに(_前日の繰越,_残). '前日の繰越がマイナスなら残はゼロに、さもなくば、残=前日の繰越'(_前日の繰越,_残) :- 'さもなくば、残=前日の繰越'(_前日の繰越,_残). 前日の繰越がマイナスなら残はゼロに(_前日の繰越,_残) :- _前日の繰越 < 0, _残 = 0. 'さもなくば、残=前日の繰越'(_前日の繰越,_残) :- _前日の繰越 >= 0, _前日の繰越 = _残. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1295436346/173 # # 質問させてください # selectしたデータを一部だけ別のテーブルに入れる方法ってありますか? # # 例:insert into table2 (aaa,bbb,ccc) select aaa as aaa,bbb as bbb,ccc as ccc from table1 # この場合table1のデータがすべてtable2に入るのでaaaだけ別のデータを入れたいと思っています。 # よろしくお願いします。 # # 海に接していない都道府県名([栃木県,群馬県,埼玉県,山梨県,長野県,岐阜県,滋賀県,奈良県]). table1(奈良県,1000,aa). table1(埼玉県,2000,ab). selectしたデータを一部だけ別のテーブルに入れる方法 :- 海に接していない都道府県名(_海に接していない都道府県名ならび), table1(_都道府県名の一,_bbb,_ccc), 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二), assertz(table2(_都道府県名の二,_bbb,_ccc)), fail. selectしたデータを一部だけ別のテーブルに入れる方法. 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二) :- M is (random mod 8) + 1, list_nth(M,_海に接していない道府県名ならび,_都道府県名の二), \+(_都道府県名の一 = _都道府県名の二), \+(table2(_都道府県名の二,_,_)). 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二) :- 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二). ?- 'a##'. # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/584 # # MySQL 5.5.19 . 長くなりますので # テーブルの定義・内容と欲しい結果はここに # http://ime.nu/codepad.org/oe1jhVrF # # で、 # # create table a_tbl( # code int(9) not null, # input_date date not null, # data1 double(9,2) unsigned default 0 not null, # data2 double(9,2) unsigned default 0 not null, # primary key(code,input_date) # ) ; # # insert into a_tbl # values # (1111,'2012-02-01',10,12), # (1111,'2012-02-02',133,14), # (1111,'2012-02-04',13,15), # (1111,'2012-02-06',13,10); # # create table b_tbl( # code varchar(10) not null, # input_date date not null, # data1 double(9,2) unsigned default 0 not null, # data2 double(9,2) unsigned default 0 not null, # primary key(code,input_date) # ) ; # # insert into b_tbl # values # ('ddd','2012-02-01',122,13), # ('ddd','2012-02-03',127,18), # ('ddd','2012-02-04',11,14), # ('ddd','2012-02-05',16,95), # ('ddd','2012-02-06',13,10); # # 欲しい結果 # input_date a.data1 a.data2 b.data2 # 2012-02-01 10 12 13 # 2012-02-02 133 14 null # 2012-02-03 null null 18 # 2012-02-04 13 15 14 # 2012-02-05 null null 95 # 2012-02-06 13 10 10 # # # select a.input_date,b.input_date,a.data1,a.data2,b.data2 # from a_tbl a # right join b_tbl b # on a.input_date = b.input_date; とすると、結果が # +------------+------------+-------+-------+-------+ # | input_date | input_date | data1 | data2 | data2 | # +------------+------------+-------+-------+-------+ # | 2012-02-01 | 2012-02-01 | 10 | 12 | 13 | # | NULL | 2012-02-03 | NULL | NULL | 18 | # | 2012-02-04 | 2012-02-04 | 13 | 15 | 14 | # | NULL | 2012-02-05 | NULL | NULL | 95 | # | 2012-02-06 | 2012-02-06 | 13 | 10 | 10 | # +------------+------------+-------+-------+-------+ # なんですが、実際にはいろんなコードが入っているので、コードも抽出条件に入れたら # select a.input_date,b.input_date,a.data1,a.data2,b.data2 # from a_tbl a # right join b_tbl b # on a.input_date = b.input_date # where # a.code=1111 and b.code='ddd'; # +------------+------------+-------+-------+-------+ # | input_date | input_date | data1 | data2 | data2 | # +------------+------------+-------+-------+-------+ # | 2012-02-01 | 2012-02-01 | 10 | 12 | 13 | # | 2012-02-04 | 2012-02-04 | 13 | 15 | 14 | # | 2012-02-06 | 2012-02-06 | 13 | 10 | 10 | # +------------+------------+-------+-------+-------+ # になってしまいました。 # コードを抽出条件に入れた状態で望ましい結果または上の方の結果になるようなSQLを教えて下さい。 # 'input_dateの集合を得る'(_input_dateの集合) :- findall(_input_date,a_tbl(_input_date,_,_),L1), findall(_input_date,b_tbl(_input_date,_,_),L2), append(L1,L2,L3), setof(_input_date,member(_input_date,L3),_input_dateの集合). 抽出(_input_date,_tbl_aのdata1ならび,_tbl_aのdata2ならび,_tbl_bのdata2ならび) :- 'input_dateの集合を得る'(_input_dateの集合), member(_input_date,_input_dateの集合), findall([_data1],tbl_a(_,_input_date,_data1,_),_tbl_aのdata1ならび), findall([_data2],tbl_a(_,_input_date,_,_data2),_tbl_aのdata2ならび), findall([_data2],tbl_b(_,_input_date,_,_data2),_tbl_bのdata2ならび). # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/633 # # MySQL 5.1です。 # # create table staff_list( # staff_id int(5) primary key //社員番号 # staff_name varchar(8) //社員名 # unit varchar(8) primary key //部署名 # ) # # insert into staff_list (staff_id,staff_name,unit) values # (1,'範馬','総務'), # (2,'愚地','総務'), # (3,'花山','総務'), # (1,'高津','企画'), # (2,'池谷','企画'), # (3,'長嶋','企画'), # (1,'鳩山','営業'), # (2,'野田','営業'), # (3,'小沢','営業'), # (4,'枝野','営業') # # # # このようなテーブルに対してSELECTをかける際、一度のクエリーで # 部署別にソートしたうえで、総務だけstaff_id降順で他を昇順で出したいと思っています。 # # order by unit,IF(staff_name='総務',staff_id desc,staff_id asc) # などと試行してみているのですがうまくできません。 # # どなたかうまい方法をご存じないでしょうか。 # # よろしくお願いいたします。 # スタッフリスト(1,範馬,総務). スタッフリスト(2,愚地,総務). スタッフリスト(3,花山,総務). スタッフリスト(1,高津,企画). スタッフリスト(2,池谷,企画). スタッフリスト(3,長嶋,企画). スタッフリスト(1,鳩山,営業). スタッフリスト(2,野田,営業). スタッフリスト(3,小沢,営業). スタッフリスト(4,枝野,営業). 'このようなテーブルを選択する際、一度部署別にソートしたうえで、総務だけ社員番号降順で出したいと思っています。'(_部署名,_社員番号,_社員名) :- 一度部署別にソートしたうえで(_部署名ならび), 総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名). 一度部署別にソートしたうえで(_部署名ならび) :- findsetof(_部署名,( スタッフリスト(_社員番号,_社員名,_部署名)), _部署名ならび). 総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名) :- member(_部署名,_部署名ならび), 総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名). 総務だけ社員番号降順で出したい(総務,_社員番号,_社員名) :- 総務だけ社員番号降順で(_社員番号,_社員名). 総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名) :- \+(_部署名 == 総務), スタッフリスト(_社員番号,_社員名,_部署名). 総務だけ社員番号降順で(_社員番号,_社員名) :- findall([_社員番号,_社員名],( スタッフリスト(_社員番号,_社員名,総務)), L1), 降順でソート(L1,L2), member([社員番号,_社員名],L2). 降順でソート(L1,L2) :- sort(L1,L3), reverse(L3,L2). % % findsetof/3 % # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/666 # # SQLite3を使っています。 # # カラムがなかったらinsert # あったらupdateしたいのですが、 # どういうSQLをかけばいいのでしょうか? # # insert into t1(c1, c2) values("hoge",10) # update t1 set c2=10 WHERE c1="hoge" # このときc1はuniqueです。 # # よろしくお願いします。 # # 'カラムがなかったらinsert あったらupdateしたい'(_テーブル,_カラムならび,_鍵カラム,_鍵値) :- findall(_カラム,( テーブル定義(_テーブル,_番目,_カラム)), L1), 鍵値をセットする(_テーブル,_鍵カラム,_鍵値,P), 'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび). 鍵値をセットする(_テーブル,L1,_鍵カラム,_鍵値,P) :- length(L1,Len), length(L2,Len), nth1(Nth,L1,_鍵カラム), nth1(Nth,L2,_鍵値), P =.. [_テーブル|L2]. 'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび) :- call(P),!, ( retract(P), Q =.. [_テーブル|_カラムならび], asserta(Q), fail; true). 'カラムがなかったらinsert あったらupdateしたい'(_,_テーブル,_カラムならび) :- Q =.. [_テーブル|_カラムならび], asserta(Q). # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/684 # # ・DBMS名とバージョン # Oracle 10g # ・テーブルデーた # create table aaa ( # id number(5,0) primary key, -- 主キー # nendo char(4), -- 年度 # tsuki char(2) -- 月 # ); # insert into aaa values (1, '2012', '01'); # insert into aaa values (2, '2012', '02'); # insert into aaa values (3, '2012', '03'); # insert into aaa values (4, '2012', '04'); # insert into aaa values (5, '2012', '05'); # ・欲しい結果 # id, nendo, tsuki # -------------------- # 4, '2012', '04' # 5, '2012', '05, # 1, '2012', '01' # 2, '2012', '02' # 3, '2012', '03' # # ・説明 # 年度/月の昇順に並べたいです。 # 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。 # '・テーブルデータ create table aaa ( id number(5,0) primary key, -- 主キー nendo char(4), -- 年度 tsuki char(2) -- 月 ); insert into aaa values (1, '2012', '01'); insert into aaa values (2, '2012', '02'); insert into aaa values (3, '2012', '03'); insert into aaa values (4, '2012', '04'); insert into aaa values (5, '2012', '05'); ・欲しい結果 id, nendo, tsuki -------------------- 4, '2012', '04' 5, '2012', '05, 1, '2012', '01' 2, '2012', '02' 3, '2012', '03' ・説明 年度/月の昇順に並べたいです。 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。'(_id,_年度,_月) :- 欲しい結果(_id,_年度,_月). 年度の場合の月順('04','05'). 年度の場合の月順('05','06'). 年度の場合の月順('06','07'). 年度の場合の月順('07','08'). 年度の場合の月順('08','09'). 年度の場合の月順('09','10'). 年度の場合の月順('10','11'). 年度の場合の月順('11','12'). 年度の場合の月順('12','01'). 年度の場合の月順('01','02'). 年度の場合の月順('02','03'). 年度の場合の月順('03','04'). 欲しい結果(_id,_年度,_月) :- findsetof(_年度,aaa(_,_年度,_),_年度ならび), member(_年度,_年度ならび), 年度順に並べる('04',_id,_年度,_月). 年度順に並べる(_月,_id,_年度,_月) :- aaa(_id,_年度,_月). 年度順に並べる(_月_1,_id,_年度,_月) :- \+(_月_1 = '03'), 年度の場合の月順(_月,_次の月), 年度順に並べる(_次の月,_id,_年度,_月). # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/684 # # ・DBMS名とバージョン # Oracle 10g # ・テーブルデーた # create table aaa ( # id number(5,0) primary key, -- 主キー # nendo char(4), -- 年度 # tsuki char(2) -- 月 # ); # insert into aaa values (1, '2012', '01'); # insert into aaa values (2, '2012', '02'); # insert into aaa values (3, '2012', '03'); # insert into aaa values (4, '2012', '04'); # insert into aaa values (5, '2012', '05'); # ・欲しい結果 # id, nendo, tsuki # -------------------- # 4, '2012', '04' # 5, '2012', '05, # 1, '2012', '01' # 2, '2012', '02' # 3, '2012', '03' # # ・説明 # 年度/月の昇順に並べたいです。 # 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。 # '・テーブルデータ create table aaa ( id number(5,0) primary key, -- 主キー nendo char(4), -- 年度 tsuki char(2) -- 月 ); insert into aaa values (1, '2012', '01'); insert into aaa values (2, '2012', '02'); insert into aaa values (3, '2012', '03'); insert into aaa values (4, '2012', '04'); insert into aaa values (5, '2012', '05'); ・欲しい結果 id, nendo, tsuki -------------------- 4, '2012', '04' 5, '2012', '05, 1, '2012', '01' 2, '2012', '02' 3, '2012', '03' ・説明 年度/月の昇順に並べたいです。 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。'(_id,_年度,_月) :- 欲しい結果(_id,_年度,_月). 欲しい結果(_id,_年度,_月) :- findsetof(_年度,aaa(_,_年度,_),_年度ならび), member(_年度,_年度ならび), 年度順に並べる(['04','05','06','07','08','09','10','11','12','01','02','03'],_id,_年度,_月). 年度順に並べる([_月|R],_id,_年度,_月) :- aaa(_id,_年度,_月). 年度順に並べる([_|R],_id,_年度,_月) :- 年度順に並べる(R,_id,_年度,_月). # 質問です。 # MySQL5です。 # テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(varchar型) の3カラムからなります。 # 各日付順の降順にしたいのですが、スレッドのように、同じコードの場合、その下に日付順でソートしたいです。 # 言っていることが、よくわからなくてすみません。 # # 元テーブル # DATE, CODE, VALUE # .... # 20140401, 11, A # 20140402, 12, B # 20140403, 11, C # 20140404, 13, D # 20140405, 12, E # 20140406, 11, F # .... # # 欲しい結果 # 20140401, 11, A # 20140403, 11, C # 20140406, 11, F # 20140402, 12, B # 20140405, 12, E # 20140404, 13, D # # 宜しくお願い致します。 # # # 879 名前:NAME IS NULL [sage]: 2014/04/25(金) 17:41:21.67 ID:??? # >>877 # どうも質問が明確じゃないけど、 # insert into tname select 〜 # の形式にすればとりあえず解決しそうな話に見える。 # # >>878 # order by code, date ということ? # # # 880 名前:NAME IS NULL []: 2014/04/25(金) 17:47:38.30 ID:+Fb19Efw (3) # 879 # 分かりずらい # 欲しい結果にしてしまいました。 # # 第1キーは、日付です。 # # 元テーブル # DATE, CODE, VALUE # 20140401, 13, A # 20140402, 11, B # 20140403, 12, C # 20140404, 13, D # 20140405, 12, E # 20140406, 11, F # # 欲しい結果 # 20140401, 13, A # 20140404, 13, D # 20140402, 11, B # 20140406, 11, F # 20140403, 12, C # 20140405, 12, E # # 宜しくお願い致します。 # # # 要するに第一キーは降順、第二キーは昇順で整列する。 # 'テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(varchar型) の3カラムからなります。各日付順の降順にしたいのですが、スレッドのように、同じコードの場合、その下に日付順でソートしたいです。'(_DATE,_CODE,_VALUE) :- '要するに第一キーは降順、第二キーは昇順で整列する。'(_DATE,_CODE,_VALUE). '要するに第一キーは降順、第二キーは昇順で整列する。'(_DATE,_CODE,_VALUE) :- 第一キー順序(_CODE), 第二キー順序(_CODE,_DATE), 元テーブル(_DATE,_CODE,_VALUE). 第一キー順序(_CODE) :- findsetof(_CODE,( 元テーブル(_DATE,_CODE,_VALUE)), L1), reverse(L1,L2), member(_CODE,L2). 第二キー順序(_CODE,_DATE) :- findsetof(_DATE,( 元テーブル(_DATE,_CODE,_VALUE)), L1), member(_DATE,L1). % 以下のサイトは # 出題場所 :: http://peace.2ch.net/test/read.cgi/db/1402919549/310 # SQLServer2012です # 日々の売上の合計が一定額を越えた日を知るにはどうすればいいでしょうか? # # 10/1 |\100 # 10/2 |\200 # 10/3 |\300 # 10/4 |\200 # 10/5 |\400 # 10/6 |\100 # # 上記で\1000を越えた日=10/5と出したいです # 売上(10/1,100). 売上(10/2,200). 売上(10/3,300). 売上(10/4,200). 売上(10/5,400). 売上(10/6,100). '日々の売上の合計が一定額を越えた日を知る'(_一定額,_日々の売上の合計が一定額を越えた日) :- 整列した_日付_売上ならび(_整列した_日付_売上ならび), 日々の売上の合計が(_整列した_日付_売上ならび,_日々の売上の合計,_日々の売上の合計が一定額を越えた日), 一定額を越えた(_一定額,_日々の売上の合計),!. 整列した_日付_売上ならび(_整列した_日付_売上ならび) :- findall([_日付,_売上],売上(_日付,_売上),_日付_売上ならび), sort(_日付_売上ならび,_整列した_日付_売上ならび). 日々の売上の合計が(_整列した_日付_売上ならび,_日々の売上の合計,_一定額を越えた日) :- append(LL1,_,_整列した_日付_売上ならび), findsum(_売上,member([_,_売上],LL1),_日々の売上の合計), last(LL1,[_一定額を越えた日,_]). 一定額を越えた(_一定額,_日々の売上の合計) :- _日々の売上の合計 > _一定額. findsum(A,P,Sum) :- findall(A,P,L), sum_list(L,Sum). % 以下のサイトは # 駒場東大前から下北沢までの距離を求めなさい 井の頭線(渋谷,神泉,500). 井の頭線(神泉,駒場東大前,900). 井の頭線(駒場東大前,池ノ上,1000). 井の頭線(池ノ上,下北沢,600). 井の頭線(下北沢,新代田,500). 駒場東大前から下北沢までの距離(_距離) :- 駒場東大前から下北沢までの距離(駒場東大前,_距離). 駒場東大前から下北沢までの距離(下北沢,0). 駒場東大前から下北沢までの距離(_駅,_距離) :- 井の頭線(_駅,_次の駅,_次の駅までの距離), 駒場東大前から下北沢までの距離(_次の駅,_次の駅から下北沢までの距離), _距離 is _次の駅から下北沢までの距離 + _次の駅までの距離. % データベースの集約問題。 % 駒場東大前から下北沢までの距離を求めなさい 井の頭線(渋谷,500). 井の頭線(神泉,900). 井の頭線(駒場東大前,1000). 井の頭線(池ノ上,600). 井の頭線(下北沢,500). 駒場東大前から下北沢までの距離(_距離) :-   findall((_駅,_次の駅までの距離),井の頭線(_駅,_次の駅までの距離),L),   駒場東大前までを読み飛ばす(L,L2),   駒場東大前から下北沢までの距離(L2,_距離). 駒場東大前までを読み飛ばす([(駒場東大前,_次の駅までの距離)|R],[(駒場東大前,_次の駅までの距離)|R]). 駒場東大前までを読み飛ばす([_|R1],R2) :-   駒場東大前までを読み飛ばす(R1,R2). 駒場東大前から下北沢までの距離([(下北沢,_)|_],0). 駒場東大前から下北沢までの距離([(_,_次の駅までの距離)|R],_下北沢までの距離) :-   駒場東大前から下北沢までの距離(R,_次の駅から下北沢までの距離),   _下北沢までの距離 is _次の駅までの距離 + _次の駅から下北沢までの距離. % 以下のサイトは # 出題場所 :: http://peace.2ch.net/test/read.cgi/db/1402919549/274 # よろしくお願いいたします。 # 【DBMS名とバージョン】Oracle 11g # 【テーブルデータ】 # ID   YMD # 1  20140101 # 1  20140102 # 1  20140103 # 1  20140105 # 1  20140106 # 2  20140101 # 2  20140102 # 【欲しい結果 】 # ID START_YMD END_YMD # 1 20140101 20140103 # 1 20140105 20140106 # 2 20140101 20140102 # 【説明】 # レコード単位で一日の日付を持つデータをグループかして、 # 開始日付と終了日付に集約したいです。 # ただし、一日でも間があれば、集約データ内では別レコードとして扱いたいです。 # # どなたかいいお知恵がございましたら、よろしくお願いいたしますm(_ _)m # # 'レコード単位で一日の日付を持つデータをグループかして、 開始日付と終了日付に集約したいです。 ただし、一日でも間があれば、集約データ内では別レコードとして扱いたいです。'(_id,_START_YMD,_END_YMD) :- setof(_ID,[_ID,_YMD] ^ table(_ID,_YMD),_ID候補), member(_ID,_ID候補), setof(_YMD,[_ID,_YMD] ^ table(_ID,_YMD),_YMD候補), 連続性検査(_YMD候補,_START_YMD,_END_YMD). 連続性検査(_YMD候補,_START_YMD,_END_YMD) :- append([L1,[_START_YMD|R2],L2],_YMD候補), 連続している([_START_YMD|R2],_END_YMD), 連続していない(L1,[_START_YMD]), 連続していない([_END_YMD],L2). 連続している([_END_YMD],_END_YMD) :- !. 連続している([_YMD_1,_YMD_2|R1],_END_YMD) :- 翌日(_YMD_1,_YMD_2), 連続している([_YMD_2|R1],_END_YMD). 連続していない(L1,L2) :- \+((last(L1,_YMD_1),L2 = [_YMD_2|_],翌日(_YMD_1,_YMD_2))). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 翌日(_YMD,_翌日) :- 年月日(_YMD,_年,_月,_日), 翌日(_年,_月,_日,_翌日). 年月日(_YMD,_年,_月,_日) :- sub_atom(_YMD,0,2,_,_年), sub_atom(_YMD,2,2,_,_月), sub_atom(_YMD,4,2,_,_日). 翌日(_年,_月,_日,_翌日) :- 年月換わり(年,_月,_日,_翌日),!. 翌日(_年,_月,_日,_翌日) :- 翌日の日(_日,_翌日の日), atomic_list_concat([_年,_月,_翌日の日],_翌日). 年月換わり(_年,'02',_月末日,_翌日) :- 二月月末(_年,'02',_月末日,_翌日). 年月換わり(_年,_月,_月末日,_翌日) :- 小の月の月末日の翌日(_月,_月末日,_翌日). 年月換わり(_年,_月,_月末日,_翌日) :- 大の月の月末日の翌日(_年,_月,_月末日,_翌日). 二月月末(_年,'02','29',_翌日) :- atomic_list_concat([_年,'03','01'],_翌日). 二月月末(_年,'02','28',_翌日) :- atom_number(_年,_年整数), \+(うるう年(_年整数)), atomic_list_concat([_年,'03','01'],_翌日). 小の月の月末日の翌日(_月,'30',_翌日) :- member(_月,['04','06','09','11']), 翌月(_月,_翌月), atomic_list_concat([_年,_翌月,'01'],_翌日). 大の月の月末日の翌日(_年,_月,'31',_翌日) :- member(_月,['01','03','05','07','08','10','12']), 翌月(_月,_翌月), 年換わり(_年,_月,_年_1), atomic_list_concat([_年_1,_翌月,'01'],_翌日). 年換わり(_年,'12',_翌年) :- 翌年(_年,_翌年). 年換わり(_年,_月,_年) :- \+(_月='12'). うるう年(_うるう年) :- 0 is mod _うるう年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!,fail. うるう年(_うるう年) :- 0 is _うるう年 mod 4. 翌月('01','02'). 翌月('02','03'). 翌月('03','04'). 翌月('04','05'). 翌月('05','06'). 翌月('06','07'). 翌月('07','08'). 翌月('08','09'). 翌月('09','10'). 翌月('10','11'). 翌月('11','12'). 翌月('12','01'). 翌日の日('01','02'). 翌日の日('02','03'). 翌日の日('03','04'). 翌日の日('04','05'). 翌日の日('05','06'). 翌日の日('06','07'). 翌日の日('07','08'). 翌日の日('08','09'). 翌日の日('09','10'). 翌日の日('10','11'). 翌日の日('11','12'). 翌日の日('12','13'). 翌日の日('13','14'). 翌日の日('14','15'). 翌日の日('15','16'). 翌日の日('16','17'). 翌日の日('17','18'). 翌日の日('18','19'). 翌日の日('19','20'). 翌日の日('20','21'). 翌日の日('21','22'). 翌日の日('22','23'). 翌日の日('23','24'). 翌日の日('24','25'). 翌日の日('25','26'). 翌日の日('26','27'). 翌日の日('27','28'). 翌日の日('28','29'). 翌日の日('29','30'). 翌日の日('30','31'). 翌年(_年,_翌年) :- atom_number(_年,_年整数), succ(_年整数,_翌年の年整数), atom_number(_翌年,_翌年の年整数). % 以下のサイトは # 出典: SQL質疑応答スレ 14問目 #935 # # ・DBMS名とバージョン Oracle11gR2 # PL/SQLのプログラムを作ってるのですが期待通り動作しておらず、その理由を知りたく思ってます # # テーブルA # a1 | a2 # --------- # 100 | 1 # 100 | 2 # 200 | 3 # というテーブルにて、a1='100'のレコードについては、a2に100を加算、といった処理をしたい。 # :- dynamic(テーブルA/2). テーブルA('100',1). テーブルA('100',2). テーブルA('200',3). 'テーブルA a1 | a2 --------- 100 | 1 100 | 2 200 | 3 というテーブルにて、a1=\'100\'のレコードについては、a2に100を加算、といった処理をしたい。' :- 'テーブルAのa1=\'100\'のレコードについては、テーブルAのa2に100を加算'. 'テーブルAのa1=\'100\'のレコードについては、テーブルAのa2に100を加算' :- forall('テーブルAのa1=\'100\'のレコードについては、'(_a1,_a2), 'テーブルAのa2に100を加算'(_a1,_a2)). 'テーブルAのa1=\'100\'のレコードについては、'(_a1,_a2) :- _a1 = '100', retract(テーブルA(_a1,_a2)). 'テーブルAのa2に100を加算'(_a1,_a2) :- _a2_2 is _a2 + 100, assertz(テーブルA(_a1,_a2_2)). % 以下のサイトは # 出典: SQL質疑応答スレ 14問目 #934 # たとえばですがある大会で1位3P・2位2P・3位1P・4位以下は0Pという風な加点があって # それぞれのチームの競技結果がデータとしてあるとします # # というわけでテーブル # ・競技結果 # 順位,チームコード,競技コード # ・加点 # 順位,得点 # ・チーム # チーム名,チームコード # # このとき大会後の各チームの総得点とチーム名を出力させたいわけですが0点のチームがうまく出せません # # select チーム名, sum(得点) as 総得点 # from (チーム join 競技結果 using (チームコード)) join 加点 using (順位) # where 順位 <= 3 # group by チーム名, チームコード # # こうすると総得点が0点のチームはチーム名すら出なくなってしまうわけですが上手い方法はありませんか? 競技結果(3,1,16,13). 競技結果(8,2,16,7). 競技結果(4,1,3,6). 競技結果(2,2,3,10). 競技結果(1,1,1,8). チーム(雨夜の星座,1). チーム(消えた蠍,2). 'ある大会で1位3P・2位2P・3位1P・4位以下は0Pという風な加点があって、それぞれのチームの競技結果から加算された総得点とチーム名を求める'(_総得点,_チーム名) :- チーム(_チーム名,_チームコード), 総得点(_チームコード,_総得点). 総得点(_チームコード,_総得点) :- findsum(_加算された得点,( 競技結果(_順位,_チームコード,_競技コード,_得点), 加算された得点(_順位,_得点,_加算された得点)),_総得点). 加算された得点(_順位,_得点,_加算された得点) :- 加点(_順位,_加点), _加算された得点 is _得点 + _加点. 加点(1,3) :- !. 加点(2,2) :- !. 加点(3,1) :- !. 加点(_,0). findsum(A,P,Sum) :- findall(A,P,L), sum_list(L,Sum). % 以下のサイトは # 出典 :: SQL質疑応答スレ 14問目 #896 # 質問です。 # PostgreSQL9.3 # # テーブル # DATE, VALUE # 20140401,-13 # 20140402,-11 # 20140403, 12 # 20140404, 13 # 20140405, 12 # 20140406,-11 # # 欲しい結果 # DATE, VALUE ,COUNT # 20140401,-13, 1 # 20140402,-11, 2 # 20140403, 12, 1 # 20140404, 13, 2 # 20140405, 12, 3 # 20140406,-11, 1 # # このように、VALUEの値の正負の連続数をCOUNTし出力するようなSQLは書けるのですか? 'VALUEの値の正負の連続数をCOUNTし出力する' :- テーブルデータをならびに取得(LL), 'VALUEの値の正負の連続数をCOUNTし出力する'(LL). テーブルデータをならびに取得(LL) :- findall([_DATE,_VALUE],テーブル(_DATE,_VALUE),LL). 'VALUEの値の正負の連続数をCOUNTし出力する'(LL) :- 同一の符号の最大連続(LL,LL2), 'COUNTして出力する'(LL2). 同一の符号の最大連続(LL,LL2) :- append([LL1,LL2,LL3],LL), 'LL2が同一符号の最大連続である'(LL1,LL2,LL3). 'LL2が同一符号の最大連続である'(LL1,LL2,LL3) :- 全てが同一符号(LL2,_符号), 'LL1の最後の要素の符号は異なる'(LL1,_符号), 'LL3の最初の要素の符号は異なる'(LL3,_符号). 全てが同一符号([],_). 全てが同一符号([[_,_VALUE]|R],_符号) :- 符号(_VALUE,_符号), 全てが同一符号(R,_符号). 符号(_VALUE,+) :- _VALUE >= 0. 符号(_VALUE,-) :- _VALUE < 0. 'LL1の最後の要素の符号は異なる'(LL1,_符号) :- \+((last(LL1,[_,_VALUE]),符号(_VALUE,_符号))). 'LL3の最初の要素の符号は異なる'(LL3,_符号) :- \+((LL3 = [[_,_VALUE]|_],符号(_VALUE,_符号))). 'COUNTして出力する'(LL2) :- forall( nth1(_nth1,LL2,[_DATE,_VALUE]), writef('%t,%t,%t\n',[_DATE,_VALUE,_nth1])). % 以下のサイトは # 出典 :: SQL質疑応答スレ14問目 #890 # 質問させてください。MySQLです。 # 上位100件を抽出してその中から10件をランダムに抽出したい。 # SELECT文はどう書けばいいですか?1行でできますか? '上位100件を抽出してその中から10件をランダムに抽出したい。'(_10件をランダムに抽出) :- 上位100件を抽出して(_上位100件), length(_10件をランダムに抽出,10), '上位100件の中から10件をランダムに抽出したい。'(_上位100件,[],_10件をランダムに抽出). '上位100件を抽出して'(_上位100件) :- findall(_値,テーブル(_値),_値ならび), 降順整列(_値ならび,_降順整列した値ならび), length(_上位100件,100), append(_上位100件,_,_降順整列した値ならび). '上位100件の中から10件をランダムに抽出したい。'(_,_,[]). '上位100件の中から10件をランダムに抽出したい。'(_上位100件,_既に選択した位置,[_選択値|R]) :- 重複なくランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値), '上位100件の中から10件をランダムに抽出したい。'(_上位100件,[_選択した位置|_既に選択した位置],R). 重複なくランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値) :- ランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値),!. 重複なくランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値) :- 重複なくランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値). ランダムに一件抽出する(_上位100件,_既にに選択した位置,_選択値) :- _選択する位置 is random(100) + 1, \+(member(_選択する位置,_既に選択した位置)), nth1(_選択する位置,_上位100件,_選択値). 降順整列([],[]). 降順整列([A|R1],L) :- 降順分割(A,R1,L1,L2), 降順整列(L1,L1_2), 降順整列(L2,L2_2), append(L1_2,[A|L2_2],L). 降順分割(_,[],[],[]). 降順分割(A,[B|R],[B|L1],L2) :- B @> A, 降順分割(A,R,L1,L2). 降順分割(A,[B|R],L1,[B|L2]) :- B @=< A, 降順分割(A,R,L1,L2). % 以下のサイトは # 質問です。 # MySQL5です。 # テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(varchar型) の3カラムからなります。 # 各日付順の降順にしたいのですが、スレッドのように、同じコードの場合、その下に日付順でソートしたいです。 # 言っていることが、よくわからなくてすみません。 # # 元テーブル # DATE, CODE, VALUE # .... # 20140401, 11, A # 20140402, 12, B # 20140403, 11, C # 20140404, 13, D # 20140405, 12, E # 20140406, 11, F # .... # # 欲しい結果 # 20140401, 11, A # 20140403, 11, C # 20140406, 11, F # 20140402, 12, B # 20140405, 12, E # 20140404, 13, D # # 宜しくお願い致します。 # # # 879 名前:NAME IS NULL [sage]: 2014/04/25(金) 17:41:21.67 ID:??? # >>877 # どうも質問が明確じゃないけど、 # insert into tname select 〜 # の形式にすればとりあえず解決しそうな話に見える。 # # >>878 # order by code, date ということ? # # # 880 名前:NAME IS NULL []: 2014/04/25(金) 17:47:38.30 ID:+Fb19Efw (3) # 879 # 分かりずらい # 欲しい結果にしてしまいました。 # # 第1キーは、日付です。 # # 元テーブル # DATE, CODE, VALUE # 20140401, 13, A # 20140402, 11, B # 20140403, 12, C # 20140404, 13, D # 20140405, 12, E # 20140406, 11, F # # 欲しい結果 # 20140401, 13, A # 20140404, 13, D # 20140402, 11, B # 20140406, 11, F # 20140403, 12, C # 20140405, 12, E # # 宜しくお願い致します。 # # # 要するに第一キーは降順、第二キーは昇順で整列する。 # 'テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(varchar型) の3カラムからなります。各日付順の降順にしたいのですが、スレッドのように、同じコードの場合、その下に日付順でソートしたいです。'(_DATE,_CODE,_VALUE) :- '要するに第一キーは降順、第二キーは昇順で整列する。'(L1,_第一番目の日付ならび), 情報を取り出す(_第一番目の日付ならび,L1,_DATE,_CODE,_VALUE). '要するに第一キーは降順、第二キーは昇順で整列する。'(L1,_第一番目の日付ならび) :- 第一キー順序(_逆順コードならび), setof(_第一番目の日付, [_CODE,_第一番目の日付] ^ ( 'CODEを取り出す'(_逆順コードならび,_CODE), 第二キー順序(_CODE,_,_第一番目の日付)),_第一番目の日付ならび). 第一キー順序(_逆順コードならび) :- setof(_CODE,[_DATE,_CODE,_VALUE] ^ 元テーブル(_DATE,_CODE,_VALUE),L1), reverse(L1,_逆順コードならび). 逆順に整列して取り出す(_逆順コードならび,_CODE) :- member(_CODE,_逆順コードならび). 第二キー順序(_CODE,[_第一番目の日付|R],_第一番目の日付) :- setof(_DATE,[_DATE,_CODE,_VALUE] ^ 元テーブル(_DATE,_CODE,_VALUE),[_第一番目の日付|R]). 情報を取り出す(_第一番目の日付ならび,_逆順コードならび,_DATE,_CODE,_VALUE) :- member(_DATE_1,_第一番目の日付ならび), 'CODEを決める'(_逆順コードならび,_DATE_1,_CODE), 元テーブル(_DATE,_CODE,_VALUE). 'CODEを決める'(_逆順コードならび,_DATE_1,_CODE) :- member(_CODE,_逆順コードならび), setof(_DATE,[_DATE,_VALUE] ^ 元テーブル(_DATE,_CODE,_VALUE),[_DATE_1|_]). % 以下のサイトは # このディレクトリの索引 # テーブルPersonが参照している複数のPersonを取得したいのですが助言ください。 # # 「テーブル」 # Person { id, name } # Friend { from, to } // from, to ともにPerson.id # # 「データ表」 # id | name | # --+-----+-- # 1, "A" # 2, "B" # 3, "C" # 4, "D" # 5, "E" # # from | to | # ----+---+-- # 1, 3 # 1, 4 # 1, 5 # 2, 4 # 3, 1 # 4, 1 # 4, 2 # 5, 1 # # [クエリ結果] # 1, 3, "C" # 1, 4, "D" # 1, 5, "E" # 2, 4, "D" # 3, 1, "A" # 4, 1, "A" # 4, 2, "B" # 5, 1, "A" # # SQL SELECT p1.id, p2.* FROM Person p1, Friend , Person p2 WHERE p1.id = Friend.from and Friend.to = p2.id; # 'Person'(1,'A'). 'Person'(2,'B'). 'Person'(3,'C'). 'Person'(4,'D'). 'Person'(5,'E'). 'Friend'(1,3). 'Friend'(1,4). 'Friend'(1,5). 'Friend'(2,4). 'Friend'(3,1). 'Friend'(4,1). 'Friend'(4,2). 'Friend'(5,1). テーブルPersonが参照している複数のPersonを取得したい(_from,_to,_name) :- _id = _to, 'Friend'(_from,_to), 'Person'(_id,_name). % 以下のサイトは # このディレクトリの索引 # テーブルPersonが参照している複数のPersonを取得したいのですが助言ください。 # # 「テーブル」 # Person { id, name } # Friend { from, to } // from, to ともにPerson.id # # 「データ表」 # id | name | # --+-----+-- # 1, "A" # 2, "B" # 3, "C" # 4, "D" # 5, "E" # # from | to | # ----+---+-- # 1, 3 # 1, 4 # 1, 5 # 2, 4 # 3, 1 # 4, 1 # 4, 2 # 5, 1 # # [クエリ結果] # 1, 3, "C" # 1, 4, "D" # 1, 5, "E" # 2, 4, "D" # 3, 1, "A" # 4, 1, "A" # 4, 2, "B" # 5, 1, "A" # # SQL SELECT p1.id, p2.* FROM Person p1, Friend , Person p2 WHERE p1.id = Friend.from and Friend.to = p2.id; # テーブルPersonが参照している複数のPersonを取得したい(_from,_to,_name) :- 'Friend'(_from,_to), person(_id,_name), _id = _to. person(1,'A'). person(2,'B'). person(3,'C'). person(4,'D'). person(5,'E'). 'Friend'(1,3). 'Friend'(1,4). 'Friend'(1,5). 'Friend'(2,4). 'Friend'(3,1). 'Friend'(4,1). 'Friend'(4,2). 'Friend'(5,1). % 以下のサイトは # このディレクトリの索引 # テーブルPersonが参照している複数のPersonを取得したいのですが助言ください。 # # 「テーブル」 # Person { id, name } # Friend { from, to } // from, to ともにPerson.id # # 「データ表」 # id | name | # --+-----+-- # 1, "A" # 2, "B" # 3, "C" # 4, "D" # 5, "E" # # from | to | # ----+---+-- # 1, 3 # 1, 4 # 1, 5 # 2, 4 # 3, 1 # 4, 1 # 4, 2 # 5, 1 # # [クエリ結果] # 1, 3, "C" # 1, 4, "D" # 1, 5, "E" # 2, 4, "D" # 3, 1, "A" # 4, 1, "A" # 4, 2, "B" # 5, 1, "A" # # SQL SELECT p1.id, p2.* FROM Person p1, Friend , Person p2 WHERE p1.id = Friend.from and Friend.to = p2.id; # テーブルPersonが参照している複数のPersonを取得したい(_from,_to,_name) :- 'Friend'(_from,_to), person(_to,_name). person(1,'A'). person(2,'B'). person(3,'C'). person(4,'D'). person(5,'E'). 'Friend'(1,3). 'Friend'(1,4). 'Friend'(1,5). 'Friend'(2,4). 'Friend'(3,1). 'Friend'(4,1). 'Friend'(4,2). 'Friend'(5,1). % 以下のサイトは % % ?- 戦艦(_艦船名,_レベル,_耐久,_火力,_雷装,_対空,_速力). 出典('twitter by @kamina741'). 参照('戦艦'). 参照('テーブル定義付き'). 参照('テーブル定義・検索項目付き'). 参照('テーブル定義・条件・検索項目付き'). 参照('Prolog Wikipedia リレーショナルデータベース'). 戦艦(比叡改二,124,91,144,0,100,高速). 戦艦(比叡改二,112,91,131,0,90,高速). 戦艦(比叡改,110,83,134,0,96,高速). 戦艦(比叡改,107,83,174,0,75,高速). 戦艦(比叡改,107,83,121,0,95,高速). 戦艦(比叡改,100,83,145,0,99,高速). 戦艦(比叡改,100,83,121,0,95,高速). 戦艦(比叡,100,71,78,0,29,高速). 戦艦(比叡,100,71,64,0,25,高速). 戦艦(比叡,100,71,98,0,32,高速). テーブル定義(戦艦,1,艦船名). テーブル定義(戦艦,2,レベル). テーブル定義(戦艦,3,耐久). テーブル定義(戦艦,4,火力). テーブル定義(戦艦,5,雷装). テーブル定義(戦艦,6,対空). テーブル定義(戦艦,7,速力). テーブル検索(_テーブル名,_条件項目名ならび,_条件値ならび,_検索項目名ならび,_値ならび,_検索した値ならび) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 条件値ならびの設定(_テーブル名,_条件項目名ならび,_条件値ならび,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名ならび,_値ならび,_検索した値ならび), 値ならび(_テーブル名,_値ならび). テーブル検索(_テーブル名,_検索項目名,_検索した値) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値), 値ならび(_テーブル名,_値ならび). テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび) :- findall(_,テーブル定義(_テーブル名,_,_),_値ならび). 条件値ならび(_,[],[],_値ならび). 条件値ならび(_テーブル名,[_条件項目名|R1],[_条件値|R2],_値ならび) :- テーブル定義(_テーブル名,_nth1,_条件項目名), nth1(_nth1,_値ならび,_条件値), 条件値ならび(_テーブル名,R1,R2,_値ならび). 値ならび中の検索項目を選択(_,[],_値ならび,[]). 値ならび中の検索項目を選択(_テーブル名,[_検索項目名|R1],_値ならび,[_検索した値|R2]) :- テーブル定義(_テーブル名,_nth1,_検索項目名), nth1(_nth1,_値ならび,_検索した値), 値ならび中の検索項目を選択(_テーブル名,R1,_値ならび,R2). 値ならび(_テーブル名,_値ならび) :- _副目標 =.. [_テーブル名|_値ならび], catch(_副目標,error(S,_error),true), 実行検査(_項,_error). 実行検査(_項,_error) :- var(_error),!. % 以下のサイトは % % ?- 戦艦(_艦船名,_レベル,_耐久,_火力,_雷装,_対空,_速力). 出典('twitter by @kamina741'). 戦艦(比叡改二,124,91,144,0,100,高速). 戦艦(比叡改二,112,91,131,0,90,高速). 戦艦(比叡改,110,83,134,0,96,高速). 戦艦(比叡改,107,83,174,0,75,高速). 戦艦(比叡改,107,83,121,0,95,高速). 戦艦(比叡改,100,83,145,0,99,高速). 戦艦(比叡改,100,83,121,0,95,高速). 戦艦(比叡,100,71,78,0,29,高速). 戦艦(比叡,100,71,64,0,25,高速). 戦艦(比叡,100,71,98,0,32,高速). テーブル定義(戦艦,1,艦船名). テーブル定義(戦艦,2,レベル). テーブル定義(戦艦,3,耐久). テーブル定義(戦艦,4,火力). テーブル定義(戦艦,5,雷装). テーブル定義(戦艦,6,対空). テーブル定義(戦艦,7,速力). テーブル検索(_テーブル名,_条件項目名ならび,_条件値ならび,_検索項目名,_検索した値) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 条件値ならびの設定(_テーブル名,_条件項目名ならび,_条件値ならび,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値), 値ならび(_テーブル名,_値ならび). テーブル検索(_テーブル名,_検索項目名,_検索した値) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値), 値ならび(_テーブル名,_値ならび). テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび) :- findall(_,テーブル定義(_テーブル名,_,_),_値ならび). 条件値ならび(_,[],[],_値ならび). 条件値ならび(_テーブル名,[_条件項目名|R1],[_条件値|R2],_値ならび) :- テーブル定義(_テーブル名,_nth1,_条件項目名), nth1(_nth1,_値ならび,_条件値), 条件値ならび(_テーブル名,R1,R2,_値ならび). 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値) :- テーブル定義(_テーブル名,_nth1,_検索項目名), nth1(_nth1,_値ならび,_検索した値). 値ならび(_テーブル名,_値ならび) :- _副目標 =.. [_テーブル名|_値ならび], catch(_副目標,error(S,_error),true), 実行検査(_項,_error). 実行検査(_項,_error) :- var(_error),!. 参照('Prolog Wikipedia リレーショナルデータベース'). % 以下のサイトは % % ?- 戦艦(_艦船名,_レベル,_耐久,_火力,_雷装,_対空,_速力). 出典('twitter by @kamina741'). 戦艦(比叡改二,124,91,144,0,100,高速). 戦艦(比叡改二,112,91,131,0,90,高速). 戦艦(比叡改,110,83,134,0,96,高速). 戦艦(比叡改,107,83,174,0,75,高速). 戦艦(比叡改,107,83,121,0,95,高速). 戦艦(比叡改,100,83,145,0,99,高速). 戦艦(比叡改,100,83,121,0,95,高速). 戦艦(比叡,100,71,78,0,29,高速). 戦艦(比叡,100,71,64,0,25,高速). 戦艦(比叡,100,71,98,0,32,高速). テーブル定義(戦艦,1,艦船名). テーブル定義(戦艦,2,レベル). テーブル定義(戦艦,3,耐久). テーブル定義(戦艦,4,火力). テーブル定義(戦艦,5,雷装). テーブル定義(戦艦,6,対空). テーブル定義(戦艦,7,速力). テーブル検索(_テーブル名,_検索項目名,_検索した値) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値), 値ならび(_テーブル名,_値ならび). テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび) :- findall(_,テーブル定義(_テーブル名,_,_),_値ならび). 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび,_検索した値) :- テーブル定義(_テーブル名,_nth1,_検索項目名), nth1(_nth1,_値ならび,_検索した値). 値ならび(_テーブル名,_値ならび) :- _副目標 =.. [_テーブル名|_値ならび], catch(_副目標,error(S,_error),true), 実行検査(_項,_error). 実行検査(_項,_error) :- var(_error),!. 参照('Prolog Wikipedia リレーショナルデータベース'). % 以下のサイトは % % ?- 戦艦(_艦船名,_レベル,_耐久,_火力,_雷装,_対空,_速力). 出典('twitter by @kamina741'). 戦艦(比叡改二,124,91,144,0,100,高速). 戦艦(比叡改二,112,91,131,0,90,高速). 戦艦(比叡改,110,83,134,0,96,高速). 戦艦(比叡改,107,83,174,0,75,高速). 戦艦(比叡改,107,83,121,0,95,高速). 戦艦(比叡改,100,83,145,0,99,高速). 戦艦(比叡改,100,83,121,0,95,高速). 戦艦(比叡,100,71,78,0,29,高速). 戦艦(比叡,100,71,64,0,25,高速). 戦艦(比叡,100,71,98,0,32,高速). テーブル定義(戦艦,1,艦船名). テーブル定義(戦艦,2,レベル). テーブル定義(戦艦,3,耐久). テーブル定義(戦艦,4,火力). テーブル定義(戦艦,5,雷装). テーブル定義(戦艦,6,対空). テーブル定義(戦艦,7,速力). テーブル検索(_テーブル名,_検索項目名,_検索した値) :- テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび), 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび), 値ならび(_テーブル名,_値ならび), テーブル定義をもとに値ならびを生成(_テーブル名,_値ならび) :- findall(_,テーブル定義(_テーブル名,_,_),L). 値ならび中の検索項目を選択(_テーブル名,_検索項目名,_値ならび) :- テーブル定義(_テーブル名,_nth1,_検索項目名), nth1(_nth1,_値ならび,_検索した値). 値ならび(_テーブル名,_値ならび) :- _副目標 =.. [_テーブル名|_値ならび], catch(_副目標,error(S,_error),true), 実行検査(_項,_error). 実行検査(_項,_error) :- var(_error),!. 参照('Prolog Wikipedia リレーショナルデータベース'). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/648 # MySQL 5.5.28を使用しています。 # # テーブルAとBを対象として # 以下の出力結果を取得したいと考えているのですが、 # どのようなSQL文を記述すればよいでしょうか? # # どなたかお知恵を拝借させてください。 # # 1.テーブルAの「item_cd」と「use_date」を抽出。 # # 2.テーブルBから、以下の条件で「status」を抽出。 # #   “「item_cd」が一致” #   “「use_date」を起点とした直近の「chg_date」” # #   ※条件に該当するレコードがない場合はNULL。 # # 3.1〜2により、テーブルAの各レコードについて #   「item_cd」の「use_date」時点における「status」を出力。 # # # 【テーブルA】(キー:id) # ------------------------------------------ # id item_cd use_date # ------------------------------------------ # 1 111 2012-04-01 # 2 111 2013-04-01 # 3 111 2014-04-01 # 4 222 2014-04-01 # 5 333 2014-04-01 # # 【テーブルB】(キー:item_cd + chg_date) # ------------------------------------------ # item_cd status chg_date # ------------------------------------------ # 111 11 2013-01-01 # 111 12 2014-01-01 # 222 21 2012-01-01 # # 【出力結果】 # ------------------------------------------ # id item_cd use_date status chg_date # ------------------------------------------ # 1 111 2012-04-01 NULL NULL # 2 111 2013-04-01 11 2013-01-01 # 3 111 2014-04-01 12 2014-01-01 # 4 222 2014-04-01 21 2012-01-01 # 5 333 2014-04-01 NULL NULL # # # 以上です。 # よろしくお願いします。 # # '【出力結果】' :- forall('3.1〜2により、テーブルAの各レコードについて   「item_cd」の「use_date」時点における「status」を出力。'(_id,_item_cd,_use_date,_status,_chg_date), writef('%3c%4r%w%5l%w\n',[_id,_item_cd,_use_date,_status,_chg_date])). '1.テーブルAの「item_cd」と「use_date」を抽出。'(_id,_item_cd,_use_date) :- テーブルA(_id,_item_cd,_use_date). '2.テーブルBから、以下の条件で「status」を抽出。   “「item_cd」が一致”   “「use_date」を起点とした直近の「chg_date」”   ※条件に該当するレコードがない場合はNULL。'(_item_cd,_use_date,_status,_chg_date) :- テーブルB(_item_cd,_status,_chg_date), _chg_date @>= _use_date,!. '3.1〜2により、テーブルAの各レコードについて   「item_cd」の「use_date」時点における「status」を出力。'(_id,_item_cd,_use_date,_status,_chg_date) :- '1.テーブルAの「item_cd」と「use_date」を抽出。'(_id,_item_cd,_use_date), '2.テーブルBから、以下の条件で「status」を抽出。   “「item_cd」が一致”   “「use_date」を起点とした直近の「chg_date」”   ※条件に該当するレコードがない場合はNULL。'(_item_cd,_use_date,_status,_chg_date). 'テーブルA'(1,111,2012-04-01). 'テーブルA'(2,111,2013-04-01). 'テーブルA'(3,111,2014-04-01). 'テーブルA'(4,222,2014-04-01). 'テーブルA'(5,333,2014-04-01). 'テーブルB'(111,11,2013-01-01). 'テーブルB'(111,12,2014-01-01). 'テーブルB'(222,21,2012-01-01). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/599 # こういうSQLがあって、 # select groups.name as "group", members.name as "member" # from groups # join members on groups.id = members.group_id # order by groups.id, members.id; # # 実行結果はこうなっています。 # group | member # --------------------+----------------- # 麦わら | ルフィ # 麦わら | ナミ # 麦わら | チョッパー # 木ノ葉隠れの里 | ナルト # 木ノ葉隠れの里 | カカシ # # ここで、memberに対してグループごとの連番をつけるにはどうしたらいいですか。 # 希望する出力結果はつぎのとおり # # group | num | member # --------------------+-----+-------------- # 麦わら | 1 | ルフィ # 麦わら | 2 | ナミ # 麦わら | 3 | チョッパー # 木ノ葉隠れの里 | 1 | ナルト # 木ノ葉隠れの里 | 2 | カカシ # # なおPostgres 9.2です。よろしくお願いします。 # # 'memberに対してグループごとの連番をつけるにはどうしたらいいですか。'(_group,_連番,_member) :- 'memberに対してグループごとの'(LL1), 連番を付ける(1,LL1,LL2), member([_group,_連番,_member],LL2). 'memberに対してグループごとの'(LL1) :- findall([_group,_member],( 'member.group'(_group,_member), members(_member)), LL1). 連番を付ける(_,[],[]). 連番を付ける(N,[[A,B],[A,C]|R1],[[A,N,B]|R2]) :- N_2 is N + 1, 連番を付ける(N_2,[[A,C]|R1],R2),!. 連番を付ける(N,[[A,B]|R1],[[A,N,B]|R2]) :- N_2 is N + 1, 連番を付ける(1,R1,R2). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/577 # こんなSQLがあります。 # # select id, name, utime # from something # order by utime desc; # # このとき、idが、ある指定された値までは読み飛ばし、それ以降のレコードを取得するにはどうしたらいいですか。 # ポイントは、 # * id順とutime順とで順番が異なること # * ソートキーは utime だが、読み飛ばす条件は id を使っていること # # whileループなら簡単な処理ですが、SQLだとどうするのでしょうか。 # # (使用DB: PostgreSQL 9.3) # 'こんなSQLがあります。 select id, name, utime from something order by utime desc; idが、ある指定された値までは読み飛ばし、それ以降のレコードを取得する'(_指定された値,_id,_name,_utime) :- 'idが、ある指定された値までは読み飛ばし、'(_指定された値,_それ以降), それ以降のレコードを取得する(_それ以降,_id,_name,_utime). 'idが、ある指定された値までは読み飛ばし、'(_指定された値,_それ以降) :- findall([_utime,_id,_name],something(_id,_name,_utime),LL1), 降順整列(LL1,LL2), append(_,[[_,_指定された値,_]|_それ以降],LL2),!. それ以降のレコードを取得する(_それ以降,_id,_name,_utime) :- member([_utime,_id,_name],_それ以降). 降順整列([],[]). 降順整列([_軸要素|_残りならび],_降順に整列したならび) :- 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,_残りならび,_軸要素より大きい要素ならび,_軸要素に等しいか小さい要素ならび), それぞれのならびを降順に整列する(_軸要素より大きい要素ならび,_軸要素に等しいか小さい要素ならび,_降順整列ならび_1,_降順整列ならび_2), append(_降順整列ならび_1,[_軸要素|_降順整列ならび_2],_降順に整列したならび). 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,[],[],[]) :- !. 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,[A|R1],[A|R2],R3) :- A @> _軸要素, 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,R1,R2,R3). 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,[A|R1],R2,[A|R3]) :- A @=< _軸要素, 軸要素より大きい要素ならびと等しいか小さい要素要素ならびに分割(_軸要素,R1,R2,R3). それぞれのならびを降順に整列する(_軸要素より大きい要素ならび,_軸要素に等しいか小さい要素ならび,_降順整列ならび_1,_降順整列ならび_2) :- 降順整列(_軸要素より大きい要素ならび,_降順整列ならび_1), 降順整列(_軸要素に等しいか小さい要素ならび,_降順整列ならび_2),!. % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/541 # 質問です教えてください # # データベース = access # テーブル名 = T_DATA # # SQLで取得したい結果は、KEYごとに日数を取得したいのですが # 重複する日数はカウントから除外したいです。 # どんなSQLを書けばいいですか? # # ・キーは、日数=5日 # ・キーは、日数=1日 # # ---------------------------------- # キー, 開始日, 終了日 # ---------------------------------- # 1, 2014/01/01, 2014/01/01 |→ 日数=1日 # 1, 2014/01/02, 2014/01/02 |→ 日数=1日 # 1, 2014/01/02, 2014/01/02 |→ 日数=0日(重複) # 1, 2014/01/03, 2014/01/03 |→ 日数=1日 # 1, 2014/01/04, 2014/01/05 |→ 日数=2日、合計=5日 # --- # 2, 2014/01/01, 2014/01/01 |→ 日数=1日 # 2, 2014/01/01, 2014/01/01 |→ 日数=0日(重複)、合計=1日 # # ↓これだと重複がカウントされてしまいます。 # SELECT # キー # ,SUM(DATEDIFF('d', 開始日, 終了日)+1) AS 日数 # FROM # T_DATA # GROUP BY # キー # 'データベース = access テーブル名 = T_DATA SQLで取得したい結果は、KEYごとに日数を取得したいのですが 重複する日数はカウントから除外したいです。'(_キーごとの日数) :- setof(_キー,[_キー,_開始日,_終了日] ^ 'T_DATA'(_キー,_開始日,_終了日),_キーならび), findall([_キー,_日数],( member(_キー,_キーならび), キーの日数を得る(_キー,_日数)), _キーごとの日数). キーの日数を得る(_キー,_日数) :- findall(_日,( 'T_DATA'(_キー,_開始日,_終了日), 整数構造に変換(_開始日,_終了日,_開始日整数構造,_終了日整数構造), 範囲の日を引出す(_開始日整数構造,_終了日整数構造,_日)), L1), 重複日を取り除いた日数(L1,_日数). 整数構造に変換(_開始日,_終了日,_開始日整数構造,_終了日整数構造) :- read_term_from_atom(_開始日,_開始日整数構造), read_term_from_atom(_終了日,_終了日整数構造). 範囲の日を引出す(_終了日,_終了日,_終了日) :- !. 範囲の日を引出す(_日,_終了日,_日). 範囲の日を引出す(_日_1,_終了日,_日) :- 翌日(_日_1,_翌日), 範囲の日を引出す(_翌日,_終了日,_日). 翌日(_年/12/_31,_翌年/1/1) :- _翌年 is _年 + 1,!. 翌日(_年/_月/_日,_年/_翌月/1) :- 月末日(_年/_月/_日), _翌月 is _月 + 1,!. 翌日(_年/_月/_日,_年/_月/_翌日の日) :- _翌日の日 is _日 + 1,!. 月末日(_年/2/29) :- うるう年(_年),!. 月末日(_年/2/28) :- \+(うるう年(_年)),!. 月末日(_年/_月/30) :- member(_月,[4,6,9,11]),!. 月末日(_年/_月/31) :- member(_月,[1,3,5,7,8,10,12]). うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail. 重複日を取り除いた日数(L1,_日数) :- sort(L1,L2), length(L2,_日数). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/509 # 質問です。 # userlistテーブル # userid |name #    1|aaa #    2|bbb # # titleテーブル # titleid|title #    1|ccc #    2|ddd # # testテーブル # userid |title|test|tst #    1|  1| qwe|asd #    1|  2| asd|zxc #    2|  1| oiu|lkj # # 上記のテーブルから下記を出力したい # name |title|test|tst #  aaa| ccc| qwe|asd #  aaa| ddd| asd|zxc #  bbb| ccc| oiu|lkj # どのように書けばいいのでしょうか。初歩的な質問で申し訳ございません。よろしくお願いします # # 'userlistテーブル userid |name    1|aaa    2|bbb titleテーブル titleid|title    1|ccc    2|ddd testテーブル userid |titleid|test|tst    1|   1| qwe|asd    1|   2| asd|zxc    2|   1| oiu|lkj 上記のテーブルから下記を出力したい name |title|test|tst  aaa| ccc| qwe|asd  aaa| ddd| asd|zxc  bbb| ccc| oiu|lkj'(_name,_title,_test,_tst) :- userlistテーブル(_userid,_name), titleテーブル(_titleid,_title), testテーブル(_userid,_titleid,_test,_tst). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/493 # SQLServer2008R2です. # テーブルデータはDATE(YYYYMMの6けたのint型),CODE(varchar型),VALUE(float型) # の3カラムからなります.各DATEの各CODEに対して過去3か月分の総和を算出したいと思います. # 元テーブル # DATE, CODE, VALUE # .... # 200101, AAA, 1 # 200102, AAA, 2 # 200103, AAA, 3 # 200104, AAA, 4 # 200101, BBB, 1 # .... # # 欲しい結果 # 200103, AAA, 6 # 200104, AAA, 9 # ....... # # 下記のようなSQLを書いたのですが,同じ結果の行が12か月分でてきます. # 何処を修正すればよろしいでしょうか?もしくは全然違うSQLでしょうか? # # SELECT A.DATE, A.CODE, SUM(B.VALUE) OVER (PARTITION BY B.DATE, B.CODE) # FROM TABLE A, TABLE B # WHERE A.CODE=B.CODE AND B.DATE>=A.DATE AND B.DATE>=(A.DATEの3か月前←計算式が長いので省略です) # ORDER BY A.DATE, A.CODE # # よろしくお願いいたします. # 'A'(200101,'AAA',1). 'A'(200102,'AAA',2). 'A'(200103,'AAA',3). 'A'(200104,'AAA',4). 'A'(200101,'BBB',1). 過去三ヶ月の集計(_過去三ヶ月の集計ならび) :- '_DATE,_CODEを鍵として、過去三ヶ月の_VALUEの集計'(_過去三ヶ月の集計ならび). '_DATE,_CODEを鍵として、過去三ヶ月の_VALUEの集計'(_過去三ヶ月の集計ならび) :- '_DATE,_CODEを鍵とする'(_DATE_CODEならび), findall([_DATE,_CODE,_集計],( '過去三ヶ月の全ての_DATE,_CODEに対して、_VALUEを集約する'(_DATE,_CODE,_DATE_CODEならび,_集計)),_過去三ヶ月の集計ならび). '_DATE,_CODEを鍵とする'(_DATE_CODEならび) :- setof([_DATE,_CODE],[_DATE,_CODE,_VALUE] ^ 'A'(_DATE,_CODE,_VALUE),_DATE_CODEならび). '過去三ヶ月の全ての_DATE,_CODEに対して、_VALUEを集約する'(_DATE,_CODE,_DATE_CODEならび,_集計) :- member([_DATE,_CODE],_DATE_CODEならび), '過去三ヶ月の_DATE,_CODEで_VAULEを集約'(_DATE,_CODE,_集計). '過去三ヶ月の_DATE,_CODEで_VAULEを集約'(_DATE,_CODE,_集計) :- '3ヶ月前の起点月'(_DATE,_3ヶ月前の起点月), findsum(_VALUE,( テーブルデータは過去三ヶ月の範囲内(_DATE,_CODE,_3ヶ月前の起点月,_VALUE)),_集計). テーブルデータは過去三ヶ月の範囲内(_DATE,_CODE,_3ヶ月前の起点月,_VALUE) :- 'A'(_DATE_1,_CODE,_VALUE), between(_3ヶ月前の起点月,_DATE,_DATE_1). '3ヶ月前の起点月'(_今月,_3ヶ月前の起点年月) :- 今月が1月から3月の範囲では前年となる(_今月,_3ヶ月前の起点年月),!. '3ヶ月前の起点月'(_今月,_3ヶ月前の起点年月) :- 今月が4月から12月の範囲では今年となる(_今月,_3ヶ月前の起点年月). 今月が1月から3月の範囲では前年となる(_今月,_3ヶ月前の起点月) :- M is _今月 mod 100, M =< 3, _3ヶ月前の起点月 is _今月 - 100 + 9. 今月が4月から12月の範囲では今年となる(_今月,_3ヶ月前の起点月) :- _3ヶ月前の起点月 is _今月 - 3. findsum(A,B,C) :- findall(A,B,L), sum_list(L,C). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/487 # 次のようなデータがあります。 # tozai nihon # 関東 関東 # 関西 関西 # −− 関西 # 関西 関東 # −− 関東 # −− −− # 関東 関東 # 関西 関西 # # (−−)は空のデータ # # # tozaiとnihonではtozaiが優先されます。 # 例えば、tozai=関西,nihon=関東となっていた場合、tozaiが優先されるので「関西」と見なされます。 # この条件で、関東と関西のデータがそれぞれ何件あるか調査する為に次の3つのSQL文を出しました。 # これらを一つの文にまとめたいのですが、どのようにしたらよいでしょうか? # # select count(*) from hoge where tozai='関東' or (tozai='' and nihon='関東'); # 結果=3 # # select count(*) from hoge where tozai='関西' or (tozai='' and nihon='関西'); # 結果=4 # # select count(*) from hoge where tozai='' and nihon=''; # 結果=1 # # 'tozaiとnihonではtozaiが優先されます。 例えば、tozai=関西,nihon=関東となっていた場合、tozaiが優先されるので「関西」と見なされます。 この条件で、関東と関西のデータがそれぞれ何件あるか調査する為に次の3つのSQL文を出しました。 これらを一つの文にまとめたいのですが、どのようにしたらよいでしょうか?'(_関東,_関西,_どちらでもない) :- findall([N1,N2,N3], 'hogeのtozai,nohonからhoge_tableの値をえる'(N1,N2,N3),LL), 縦列を合計する(LL,_関東,_関西,_どちらでもない). 'hogeのtozai,nohonからhoge_tableの値をえる'(N1,N2,N3) :- hoge(_tozai,_nihon), hoge_select(_tozai,_hihon,N1,N2,N3). 縦列を合計する(LL,_関東,_関西,_どちらでもない) :- 転置(LL,[L1,L2,L3]), '転置された三つの行から_関東,_関西,_どちらでもないを求める'(L1,L2,L3,_関東,_関西,_どちらでもない). '転置された三つの行から_関東,_関西,_どちらでもないを求める'(L1,L2,L3,_関東,_関西,_どちらでもない). '転置された1行目の合計が_関東となる'(L1,_関東), '転置された2行目の合計が_関西となる'(L2,_関西), '転置された3行目の合計が_どちらでもないとなる'(L3,_どちらでもない), '転置された1行目の合計が_関東となる'(L1,_関東) :- sum_list(L1,_関東). '転置された2行目の合計が_関西となる'(L2,_関西) :- sum_list(L2,_関西). '転置された3行目の合計が_どちらでもないとなる'(L3,_どちらでもない) :- sum_list(L3,_どちらでもない). hoge_select('','',0,0,1). hoge_select('',関東,1,0,0). hoge_select('',関西,0,1,0). hoge_select(関東,_,1,0,0). hoge_select(関西,_,0,1,0). 転置([[]|_],[]) :- !. 転置(L,[L1|R2]) :- 転置(L,L2,L1), 転置(L2,R2). 転置([],[],[]) :- !. 転置([[A|R1]|R2],[R1|R3],[A|R4]) :- 転置(R2,R3,R4). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/db/1371476534/435 # ある表の並び順をユーザーが任意に指定できるフィールド sort_key があります。 # 例) # id,sort_key # 1, 3 # 2, 4 # 3, 2 # 4, 5 # 5, 1 # … # この表の任意の行をアプリ側でユーザーが sort_key を変更したあと、 # 全行の sort_key を振り直すにはどうしたらいいでしょうか? # # :- dynamic(テーブル/2). '表の任意の行をアプリ側でユーザーが sort_key を変更したあと、全行の sort_key を振り直す'(_id,_変更するsort_key) :- sort_keyを後方順位に移動(_id,_変更するsort_key,_sort_key_2), sort_key順序をひとつずらす(後方移動,_sort_key_2,_変更するsort_key). '表の任意の行をアプリ側でユーザーが sort_key を変更したあと、全行の sort_key を振り直す'(_id,_変更するsort_key) :- sort_keyを前方順位に移動(_id,_変更するsort_key,_sort_key_2), sort_key順序をひとつずらす(前方移動,_sort_key_1,_変更するsort_key). sort_keyを後方順位に移動(_id,_変更するsort_key,_sort_key_2) :- テーブル(_id,_sort_key), _sort_key =< _変更するsort_key, テーブルの書き換え(_id,_sort_key,_変更するsort_key), _sort_key_2 is _sort_key + 1. sort_keyを前方順位に移動(_id,_変更するsort_key,_sort_key_2) :- テーブル(_id,_sort_key), _sort_key >= _変更するsort_key, テーブルの書き換え(_id,_sort_key,_変更するsort_key), _sort_key_1 is _sort_key - 1. sort_key順序を後方にひとつずらす(_sort_key,_変更するsort_key) :- _sort_key > _変更するsort_key,!. sort_key順序を後方にひとつずらす(_sort_key,_変更するsort_key) :- '変更対象節の書き換え(後方移動)'(_sort_key), _sort_key_2 is _sort_key + 1, sort_key順序を後方にひとつずらす(_sort_key_2,_変更するsort_key). sort_key順序を前方にひとつずらす(_sort_key,_変更するsort_key) :- _sort_key < _変更するsort_key,!. sort_key順序を前方にひとつずらす(_sort_key,_変更するsort_key) :- '変更対象節の書き換え(前方移動)'(_sort_key), _sort_key_1 is _sort_key - 1, sort_key順序を前方にひとつずらす(_sort_key_1,_変更するsort_key). '変更対象節の書き換え(後方移動)'(_sort_key) :- _sort_key_1 is _sort_key - 1, テーブルの書き換え(_id,_sort_key,_id_sort_key_1). '変更対象節の書き換え(前方移動)'(_sort_key) :- _sort_key_2 is _sort_key + 1, テーブルの書き換え(_id,_sort_key,_id_sort_key_2). テーブルの書き換え(_id,_sort_key,_id_sort_key_1) :- retract(テーブル(_id,_sort_key)), assertz(テーブル(_id,_sort_key_1)). % 以下のサイトは # 例題の1つに、すべての製品を注文したすべての顧客の平均の売掛残高、および # すべての製品を注文していない顧客の平均の売掛残高を求めるといったものがありました。 % 単位節データベースを抽象するならば、 すべての製品を注文していない顧客の平均の売掛残高を求める(_すべての製品を注文していない顧客の平均の売掛残高) :- findall(_売掛残高,( すべての製品を注文していない顧客の売掛残高(_売掛残高)),_売掛残高ならび), 平均の売掛残高を求める(_売掛残高ならび,_すべての製品を注文していない顧客の平均の売掛残高). すべての製品を注文していない顧客の売掛残高(_売掛残高) :- すべての製品を注文していない顧客(_顧客), 売掛残高(_顧客,_売掛残高). すべての製品を注文していない顧客(_顧客) :- 顧客(_顧客), すべての製品を注文していない(_顧客). すべての製品を注文していない(_顧客) :- forall(商品(_商品),注文していない(_顧客,_商品)). 注文していない(_顧客,_商品) :- \+(注文(_顧客,_商品)). 平均の売掛残高を求める(_売掛残高ならび,_すべての製品を注文していない顧客の平均の売掛残高) :- 顧客数と売掛残高合計を得る(_売掛残高ならび,_顧客数,_売掛残高合計), 売掛残高合計と顧客数から平均売掛残高を求める(_売掛残高合計,_顧客数,_すべての製品を注文していない顧客の平均の売掛残高). 顧客数と売掛残高合計を得る(_売掛残高ならび,_顧客数,_売掛残高合計) :- length(_売掛残高ならび,_顧客数), sum_list(_売掛残高ならび,_売掛残高合計). 売掛残高合計と顧客数から平均売掛残高を求める(_売掛残高合計,_顧客数,_すべての製品を注文していない顧客の平均の売掛残高) :- _顧客数 > 0, _すべての製品を注文していない顧客の平均の売掛残高 is _売掛残高合計 / _顧客数. % 以下のサイトは # 例題の1つに、すべての製品を注文したすべての顧客の平均の売掛残高、および # すべての製品を注文していない顧客の平均の売掛残高を求めるといったものがありました。 % 単位節データベースを抽象するならば、 すべての製品を注文したすべての顧客の平均の売掛残高を求める(_すべての製品を注文したすべての顧客の平均の売掛残高) :- findavg(_売掛残高,( すべての製品を注文した顧客の売掛残高(_売掛残高)), _すべての製品を注文したすべての顧客の平均の売掛残高). すべての製品を注文した顧客の売掛残高(_売掛残高) :- すべての製品を注文した顧客(_顧客), 売掛残高(_顧客,_売掛残高). すべての製品を注文した顧客(_顧客) :- 顧客(_顧客), forall(商品(_商品),注文(_顧客,_商品)). findavg(_選択,_目標,_平均値) :- findall(_選択,_目標,L), sum_list(L,_合計), length(L,_標本数), _平均値 is _合計 / _標本数. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/959 # # 質問させてください # # アマゾンとかでよくある商品の評価ポイントを集計するクエリを作りたいです # アマゾンと少し違うのは、商品そのものの評価ポイントではなく、 # 商品を登録した出品者くくりでの、「その出品者が出品した全ての商品の評価ポイント」の平均値をとることです # # まとめると、 # ・特定の出品者の出品した商品の評価ポイントの平均値をとる # ・同時に、レビューの件数をとる # ・判明してるキーはt_prof.keyのみです # # テーブルは以下の通り。 # # レビューtable =t_review # =============================== # reviewId -- int(11) :プライマリキー、auto_increment # workId -- int(11) :商品のID # userId -- int(11) :出品者のID # point -- tinyInt(1):評価ポイント(1〜5) # # 出品者プロフィールtable =t_prof # =============================== # userId -- int(11) :プライマリキー、auto_increment # namae -- text :出品者の名前 # key -- int(3):キー。ユニーク # # どんなクエリを書いたらいいんでしょうか # すみません、よろしくお願いします # 'アマゾンとかでよくある商品の評価ポイントを集計するクエリを作りたいです アマゾンと少し違うのは、商品そのものの評価ポイントではなく、 商品を登録した出品者くくりでの、「その出品者が出品した全ての商品の評価ポイント」の平均値をとることです まとめると、 ・特定の出品者の出品した商品の評価ポイントの平均値をとる ・同時に、レビューの件数をとる ・判明してるキーはt_prof.keyのみです テーブルは以下の通り。 レビューtable =t_review =============================== reviewId -- int(11) :プライマリキー、auto_increment workId -- int(11) :商品のID userId -- int(11) :出品者のID point -- tinyInt(1):評価ポイント(1〜5) 出品者プロフィールtable =t_prof =============================== userId -- int(11) :プライマリキー、auto_increment namae -- text :出品者の名前 key -- int(3):キー。ユニーク どんなクエリを書いたらいいんでしょうか すみません、よろしくお願いします'(_商品のID,_出品者のID,_出品者の名前,_レビューの件数,_評価点の平均) :- '商品を登録した出品者くくりでの、「その出品者が出品した全ての商品の評価ポイント」の平均値をとる'(_商品のID,_出品者のID,_出品者の名前,_レビューの件数,_評価点の平均). '商品を登録した出品者くくりでの、「その出品者が出品した全ての商品の評価ポイント」の平均値をとる'(_商品のID,_出品者のID,_出品者の名前,_レビューの件数,_評価点の平均) :- 商品から出品者を得る(_商品のID,_出品者のID), レビューの件数と評価点の平均を得る(_商品のID,_レビューの件数,_評価点の平均), 出品者の名前を得る(_出品者のID,_出品者の名前). 商品から出品者を得る(_商品のID,_出品者のID) :- レビュー(_,_商品のID,_出品者のID,_). レビューの件数と評価点の平均を得る(_出品者のID,_レビューの件数,_評価点の平均) :- findall(_評価点,( レビュー(_,_商品のID,_出品者のID,_評価点)), _評価点ならび), レビューの件数と評価点の平均を得る(_評価点ならび,_評価点の平均), length(_評価点ならび,_レビューの件数), 相加平均(_評価点ならび,_評価点の平均). 出品者の名前を得る(_出品者のID,_出品者の名前) :- 出品者プロフィール(_,_出品者の名前,_出品者のID). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/952 # # MySQLについての質問です。 # # highscoreというテーブルに、id, scoreという2つのカラムがあります。 # idのインデックスはPRIMARYです。 # # POSTでidとscoreの値が送られてきたとき、 # そのidが既に登録されている場合、送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 # 送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたいのですが、 # 条件分岐の部分でどのようなSQLを書けばよいのか検討がつきません。 # # 何かヒントをいただければ幸いです。よろしくお願いします。 # # :- dynamic(highscore/2). 'highscoreというテーブルに、id, scoreという2つのカラムがあります。 idのインデックスはPRIMARYです。 POSTでidとscoreの値が送られてきたとき、 そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :- 'そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score). 'そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :- 'そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score). 'そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し、 送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :- '送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score). 'そのidが既に登録されている場合、 送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score) :- 'そのidが既に登録されている場合'(_id), '送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score). '送られてきたidがまだテーブルに存在しなければ、新規レコードとしてINSERTしたい'(_id,_score) :- '送られてきたidがまだテーブルに存在しなければ'(_id), '新規レコードとしてINSERTしたい'(_id,_score). 'そのidが既に登録されている場合'(_id) :- highscore(_id,_). '送られてきたidがまだテーブルに存在しなければ'(_id) :- \+(highscore(_id,_)). '送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_id,_score) :- '送られてきたscoreが登録されているscoreより大きければ'(_id,_score), 'そのidのscoreを更新し'(_id,_score). '送られてきたscoreが登録されているscoreより大きければ、そのidのscoreを更新し'(_,_). '送られてきたscoreが登録されているscoreより大きければ'(_id,_score) :- highscore(_id,_score_1), _score @> _score_1. 'そのidのscoreを更新し'(_id,_score) :- retract(highscore(_id,_)), assertz(highscore(_id,_score)),!. '新規レコードとしてINSERTしたい'(_id,_score) :- assertz(highscore(_id,_score)). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/900 # # t1: # id data1 data2 data3 # 11 good bad  bad # 12 bad  good bad # 13 good bad  good # # t2: # data score # good 100 # bad  0 # # 2つのテーブルがあり、t1にidに対する各データに対する評価 # t2にはその評価に対する点数が入っています。 # ここからテーブルを結合し、t1.idに対する、data1,data2,data3の点数を拾いたいと思っています。 # その際、この場合は3回結合するしかないのでしょうか? # '2つのテーブルがあり、t1にidに対する各データに対する評価 t2にはその評価に対する点数が入っています。ここからテーブルを結合し、t1.idに対する、data1,data2,data3の点数を拾いたい'(_id,_data1,_data2,_data3,_score1,_score2,_score3) :- t1(_id,_data1,_data2,_data3), t2(_data1,_score1), t2(_data2,_score2), t2(_data3,_score3). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/885 # # t1 # ID    KEY    HOGE # ----------------------- # 1     a      5 # 1     b      7 # 2     a      5 # 2     b      8 # 3     a      4 # 3     b      4 # 4     b      9 # 4     d      2 # # t2 # ID    KEY    PIYO # ----------------------- # 1     a      7 # 1     b      1 # 1     c      1 # 1     d      5 # 2     a      2 # 2     c      8 # 3     a      7 # 4     c      6 # # t3 # ID    KEY    NYAN # ----------------------- # 1     d      5 # 2     a      5 # 2     d      7 # 3     b      4 # 3     c      3 # 3     d      2 # 4     d      7 # 5     b      1 # # こういう3つのテーブルから # t1で KEY a b を # t2で KEY c を # t3で KEY d且つNYAN 5以上を持っているID1と2のみを取り出したいのですがどうすればいいでしょうか # # 't1 ID    KEY    HOGE ----------------------- 1     a      5 1     b      7 2     a      5 2     b      8 3     a      4 3     b      4 4     b      9 4     d      2 t2 ID    KEY    PIYO ----------------------- 1     a      7 1     b      1 1     c      1 1     d      5 2     a      2 2     c      8 3     a      7 4     c      6 t3 ID    KEY    NYAN ----------------------- 1     d      5 2     a      5 2     d      7 3     b      4 3     c      3 3     d      2 4     d      7 5     b      1 こういう3つのテーブルから t1で KEY a b を t2で KEY c を t3で KEY d且つNYAN 5以上を持っているID1と2のみを取り出したい'(_ID) :- こういう3つのテーブルから(_ID,_KEY_1,_HOGE_1,_KEY_2,_PIYO_2,_KEY_3,_NYAN_3), 't1で KEY a b を'(_ID,_KEY_1), 't2で KEY c を'(_ID,_KEY_2), 't3で KEY d且つNYAN 5以上を'(_ID,_KEY_3,_NYAN_3), 'ID1と2のみを取り出したい'(_ID). こういう3つのテーブルから(_ID,_KEY_1,_HOGE_1,_KEY_2,_PIYO_2,_KEY_3,_NYAN_3) :- t1(_ID,_KEY_1,_HOGE_1), t2(_ID,_KEY_2,_PIYO_2), t3(_ID,_KEY_3,_NYAN_3). 't1で KEY a b を'(_ID,_KEY_1) :- member(_KEY_1,[a,b]). 't2で KEY c を'(_ID,_KEY_2) :- _KEY_2 = c. 't3で KEY d且つNYAN 5以上を'(_ID,_KEY_3,_NYAN_3) :- _KEY_3 = d, _NYAN_3 >= 5. 'ID1と2のみを取り出したい'(_ID) :- member(_ID,[1,2]). % 以下のサイトは # 出題場所:: http://toro.2ch.net/test/read.cgi/db/1343899481/819 # 環境:アクセス2007 # # 得点テーブル # 日 科目 得点 # 1/1 英語 80 # 1/1 国語 50 # 1/1 数学 90 # # 1/2 英語 70 # 1/2 国語 70 # # 1/3 国語 60 # 1/3 数学 80 # # 1/4 英語 60 # 1/4 国語 60 # 1/4 数学 60 # # このようなテーブルから、下記のようにデータを取ってエクセルに張り付けたいのですが # どのようにすればよいでしょうか。 # # 日 英語  国語  数学 # 1/1 80 50 90 # 1/2 70 70 # 1/3 60 80 # 1/4 60 60 60 # # '環境:アクセス2007 得点テーブル 日 科目 得点 1/1 英語 80 1/1 国語 50 1/1 数学 90 1/2 英語 70 1/2 国語 70 1/3 国語 60 1/3 数学 80 1/4 英語 60 1/4 国語 60 1/4 数学 60 このようなテーブルから、下記のようにデータを取ってエクセルに張り付けたいのですが どのようにすればよいでしょうか。 日 英語  国語  数学 1/1 80 50 90 1/2 70 70 1/3 60 80 1/4 60 60 60' :- write('日,英語,国語,数学\n'), 日付ごとに三科目の得点を表示する(R). 日付ごとに三科目の得点を表示する :- forall(日付の選択(_日),三科目の得点を表示する(_日,_英語,_国語,_数学)). 日付の選択(_日) :- setof(_日,[_日,_科目,_得点] ^ 得点テーブル(_日,_科目,_得点),_日ならび), member(_日,_日ならび). 三科目の得点を表示する(_日) :- writef('%t,',[_日]), 英語表示(_日), 国語表示(_日), 数学表示(_日). 英語表示(_日) :- 得点テーブル(_日,英語,_得点), writef('%3r,',[_得点]),!. 英語表示(_日) :- writef('%t,',[' ']). 国語表示(_日) :- 得点テーブル(_日,国語,_得点), writef('%3r,',[_得点]),!. 国語表示(_日) :- writef('%t,',[' ']). 数学表示(_日) :- 得点テーブル(_日,数学,_得点), writef('%3r\n',[_得点]),!. 数学表示(_日) :- writef('%t\n',[' ']). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/764 # # 【質問テンプレ】 # ・DBMS名とバージョン # SQLiteバージョン3 # # ・テーブルデータ # ドメインID,ドメイン名 # ------------ # 1,test1.co.jp # 2,test2.co.jp # # ・欲しい結果 # "server1.test1.co.jp"という入力に対し # "test1.co.jp"のドメインIDである1 # # ・説明 # 自分のサイトへのアクセスを行うドメインを管理しています。 # "server1.test1.co.jp"や、"server2.test1.co.jp"等、第4レベルだけが違う同じ業者からのアクセスがあります。 # それらを"test1.co.jp"からのアクセスであると判断し、ドメインIDである1を取得したいのです。 # # 以上、宜しくお願いします。 '・DBMS名とバージョン SQLiteバージョン3 ・テーブルデータ ドメインID,ドメイン名 ------------ 1,test1.co.jp 2,test2.co.jp ・欲しい結果 "server1.test1.co.jp"という入力に対し "test1.co.jp"のドメインIDである1 ・説明 自分のサイトへのアクセスを行うドメインを管理しています。 "server1.test1.co.jp"や、"server2.test1.co.jp"等、第4レベルだけが違う同じ業者からのアクセスがあります。 それらを"test1.co.jp"からのアクセスであると判断し、ドメインIDである1を取得したいのです。'(_URL,_第三レベルドメイン名,_ドメインID) :- 第三ドメイン名を取得する(_URL,_第三レベルドメイン名), ドメインIDを取り出す(_第三レベルドメイン名,_ドメインID). 第三ドメイン名を取得する(_URL,_第三レベルドメイン名) :- split(_URL,['/','ftp://','file:///','http://','mailto://'],[A|_]), '第二・第一レベルドメインを切り捨てる'(A,C), split(C,['.'],L). last(L,_第三レベルドメイン名),!. '第二・第一レベルドメインを切り捨てる'(A,C) :- '第二・第一レベルドメイン'(A), sub_atom(A,St,Len,0,B), sub_atom(A,0,St,Len,C),!. ドメインIDを取り出す(_第三レベルドメイン名,_ドメインID) :- atom_chars(_第三レベルドメイン名,Chars), append(L1,L2,Chars), forall(member(E,L2),数字(E)), atomic_list_concat(L2,_ドメインID),!. 数字(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']). '第二・第一レベルドメイン'(a). '第二・第一レベルドメイン'(ab). '第二・第一レベルドメイン'(abo). '第二・第一レベルドメイン'(abog). '第二・第一レベルドメイン'(aboga). '第二・第一レベルドメイン'(abogad). '第二・第一レベルドメイン'(abogado). '第二・第一レベルドメイン'(ac). '第二・第一レベルドメイン'(ad). '第二・第一レベルドメイン'(adu). '第二・第一レベルドメイン'(adul). '第二・第一レベルドメイン'(adult). '第二・第一レベルドメイン'(ae). '第二・第一レベルドメイン'(aer). '第二・第一レベルドメイン'(aero). '第二・第一レベルドメイン'(af). '第二・第一レベルドメイン'(afr). '第二・第一レベルドメイン'(afri). '第二・第一レベルドメイン'(afric). '第二・第一レベルドメイン'(africa). '第二・第一レベルドメイン'(ag). '第二・第一レベルドメイン'(ai). '第二・第一レベルドメイン'(al). '第二・第一レベルドメイン'(am). '第二・第一レベルドメイン'(ams). '第二・第一レベルドメイン'(amst). '第二・第一レベルドメイン'(amste). '第二・第一レベルドメイン'(amster). '第二・第一レベルドメイン'(amsterd). '第二・第一レベルドメイン'(amsterda). '第二・第一レベルドメイン'(amsterdam). '第二・第一レベルドメイン'(ap). '第二・第一レベルドメイン'(app). '第二・第一レベルドメイン'(as). '第二・第一レベルドメイン'(asi). '第二・第一レベルドメイン'(asia). '第二・第一レベルドメイン'(at). '第二・第一レベルドメイン'(au). '第二・第一レベルドメイン'(auc). '第二・第一レベルドメイン'(auct). '第二・第一レベルドメイン'(aucti). '第二・第一レベルドメイン'(auctio). '第二・第一レベルドメイン'(auction). '第二・第一レベルドメイン'(ax). '第二・第一レベルドメイン'(az). '第二・第一レベルドメイン'(b). '第二・第一レベルドメイン'(ba). '第二・第一レベルドメイン'(bab). '第二・第一レベルドメイン'(baby). '第二・第一レベルドメイン'(ban). '第二・第一レベルドメイン'(bank). '第二・第一レベルドメイン'(bar). '第二・第一レベルドメイン'(barc). '第二・第一レベルドメイン'(barce). '第二・第一レベルドメイン'(barcel). '第二・第一レベルドメイン'(barcelo). '第二・第一レベルドメイン'(barcelon). '第二・第一レベルドメイン'(barcelona). '第二・第一レベルドメイン'(bb). '第二・第一レベルドメイン'(be). '第二・第一レベルドメイン'(bee). '第二・第一レベルドメイン'(beer). '第二・第一レベルドメイン'(ber). '第二・第一レベルドメイン'(berl). '第二・第一レベルドメイン'(berli). '第二・第一レベルドメイン'(berlin). '第二・第一レベルドメイン'(bg). '第二・第一レベルドメイン'(bi). '第二・第一レベルドメイン'(bik). '第二・第一レベルドメイン'(bike). '第二・第一レベルドメイン'(biz). '第二・第一レベルドメイン'(bj). '第二・第一レベルドメイン'(bl). '第二・第一レベルドメイン'(blo). '第二・第一レベルドメイン'(blog). '第二・第一レベルドメイン'(bm). '第二・第一レベルドメイン'(bo). '第二・第一レベルドメイン'(boo). '第二・第一レベルドメイン'(book). '第二・第一レベルドメイン'(booki). '第二・第一レベルドメイン'(bookin). '第二・第一レベルドメイン'(booking). '第二・第一レベルドメイン'(bos). '第二・第一レベルドメイン'(bost). '第二・第一レベルドメイン'(bosto). '第二・第一レベルドメイン'(boston). '第二・第一レベルドメイン'(br). '第二・第一レベルドメイン'(bru). '第二・第一レベルドメイン'(brus). '第二・第一レベルドメイン'(bruss). '第二・第一レベルドメイン'(brusse). '第二・第一レベルドメイン'(brussel). '第二・第一レベルドメイン'(brussels). '第二・第一レベルドメイン'(bs). '第二・第一レベルドメイン'(bu). '第二・第一レベルドメイン'(bud). '第二・第一レベルドメイン'(buda). '第二・第一レベルドメイン'(budap). '第二・第一レベルドメイン'(budape). '第二・第一レベルドメイン'(budapes). '第二・第一レベルドメイン'(budapest). '第二・第一レベルドメイン'(by). '第二・第一レベルドメイン'(bz). '第二・第一レベルドメイン'(c). '第二・第一レベルドメイン'(ca). '第二・第一レベルドメイン'(cap). '第二・第一レベルドメイン'(cape). '第二・第一レベルドメイン'(capet). '第二・第一レベルドメイン'(capeto). '第二・第一レベルドメイン'(capetow). '第二・第一レベルドメイン'(capetown). '第二・第一レベルドメイン'(car). '第二・第一レベルドメイン'(care). '第二・第一レベルドメイン'(caree). '第二・第一レベルドメイン'(career). '第二・第一レベルドメイン'(cas). '第二・第一レベルドメイン'(cash). '第二・第一レベルドメイン'(cat). '第二・第一レベルドメイン'(cc). '第二・第一レベルドメイン'(cd). '第二・第一レベルドメイン'(cf). '第二・第一レベルドメイン'(cg). '第二・第一レベルドメイン'(ch). '第二・第一レベルドメイン'(chr). '第二・第一レベルドメイン'(chri). '第二・第一レベルドメイン'(chris). '第二・第一レベルドメイン'(christ). '第二・第一レベルドメイン'(christm). '第二・第一レベルドメイン'(christma). '第二・第一レベルドメイン'(christmas). '第二・第一レベルドメイン'(ci). '第二・第一レベルドメイン'(cl). '第二・第一レベルドメイン'(cli). '第二・第一レベルドメイン'(clic). '第二・第一レベルドメイン'(click). '第二・第一レベルドメイン'(cm). '第二・第一レベルドメイン'(cn). '第二・第一レベルドメイン'(co). '第二・第一レベルドメイン'('co.'). '第二・第一レベルドメイン'('co.a'). '第二・第一レベルドメイン'('co.ao'). '第二・第一レベルドメイン'('co.at'). '第二・第一レベルドメイン'('co.b'). '第二・第一レベルドメイン'('co.bw'). '第二・第一レベルドメイン'('co.c'). '第二・第一レベルドメイン'('co.ck'). '第二・第一レベルドメイン'('co.cm'). '第二・第一レベルドメイン'('co.cr'). '第二・第一レベルドメイン'('co.f'). '第二・第一レベルドメイン'('co.fk'). '第二・第一レベルドメイン'('co.h'). '第二・第一レベルドメイン'('co.hu'). '第二・第一レベルドメイン'('co.i'). '第二・第一レベルドメイン'('co.id'). '第二・第一レベルドメイン'('co.il'). '第二・第一レベルドメイン'('co.in'). '第二・第一レベルドメイン'('co.ir'). '第二・第一レベルドメイン'('co.j'). '第二・第一レベルドメイン'('co.jp'). '第二・第一レベルドメイン'('co.k'). '第二・第一レベルドメイン'('co.ke'). '第二・第一レベルドメイン'('co.kr'). '第二・第一レベルドメイン'('co.l'). '第二・第一レベルドメイン'('co.ls'). '第二・第一レベルドメイン'('co.m'). '第二・第一レベルドメイン'('co.mz'). '第二・第一レベルドメイン'('co.n'). '第二・第一レベルドメイン'('co.nl'). '第二・第一レベルドメイン'('co.no'). '第二・第一レベルドメイン'('co.nz'). '第二・第一レベルドメイン'('co.r'). '第二・第一レベルドメイン'('co.rs'). '第二・第一レベルドメイン'('co.t'). '第二・第一レベルドメイン'('co.th'). '第二・第一レベルドメイン'('co.tt'). '第二・第一レベルドメイン'('co.tz'). '第二・第一レベルドメイン'('co.u'). '第二・第一レベルドメイン'('co.ug'). '第二・第一レベルドメイン'('co.uk'). '第二・第一レベルドメイン'('co.z'). '第二・第一レベルドメイン'('co.za'). '第二・第一レベルドメイン'('co.zw'). '第二・第一レベルドメイン'(cof). '第二・第一レベルドメイン'(coff). '第二・第一レベルドメイン'(coffe). '第二・第一レベルドメイン'(coffee). '第二・第一レベルドメイン'(com). '第二・第一レベルドメイン'('com.'). '第二・第一レベルドメイン'('com.a'). '第二・第一レベルドメイン'('com.ag'). '第二・第一レベルドメイン'('com.ai'). '第二・第一レベルドメイン'('com.al'). '第二・第一レベルドメイン'('com.an'). '第二・第一レベルドメイン'('com.ar'). '第二・第一レベルドメイン'('com.au'). '第二・第一レベルドメイン'('com.aw'). '第二・第一レベルドメイン'('com.az'). '第二・第一レベルドメイン'('com.b'). '第二・第一レベルドメイン'('com.bd'). '第二・第一レベルドメイン'('com.bh'). '第二・第一レベルドメイン'('com.bn'). '第二・第一レベルドメイン'('com.bo'). '第二・第一レベルドメイン'('com.br'). '第二・第一レベルドメイン'('com.bs'). '第二・第一レベルドメイン'('com.bt'). '第二・第一レベルドメイン'('com.c'). '第二・第一レベルドメイン'('com.cm'). '第二・第一レベルドメイン'('com.cn'). '第二・第一レベルドメイン'('com.co'). '第二・第一レベルドメイン'('com.cy'). '第二・第一レベルドメイン'('com.d'). '第二・第一レベルドメイン'('com.de'). '第二・第一レベルドメイン'('com.dz'). '第二・第一レベルドメイン'('com.e'). '第二・第一レベルドメイン'('com.ec'). '第二・第一レベルドメイン'('com.eg'). '第二・第一レベルドメイン'('com.es'). '第二・第一レベルドメイン'('com.et'). '第二・第一レベルドメイン'('com.f'). '第二・第一レベルドメイン'('com.fj'). '第二・第一レベルドメイン'('com.g'). '第二・第一レベルドメイン'('com.ge'). '第二・第一レベルドメイン'('com.gh'). '第二・第一レベルドメイン'('com.gi'). '第二・第一レベルドメイン'('com.gl'). '第二・第一レベルドメイン'('com.gn'). '第二・第一レベルドメイン'('com.gr'). '第二・第一レベルドメイン'('com.gt'). '第二・第一レベルドメイン'('com.gu'). '第二・第一レベルドメイン'('com.h'). '第二・第一レベルドメイン'('com.hk'). '第二・第一レベルドメイン'('com.hr'). '第二・第一レベルドメイン'('com.j'). '第二・第一レベルドメイン'('com.jm'). '第二・第一レベルドメイン'('com.jo'). '第二・第一レベルドメイン'('com.k'). '第二・第一レベルドメイン'('com.kh'). '第二・第一レベルドメイン'('com.kw'). '第二・第一レベルドメイン'('com.l'). '第二・第一レベルドメイン'('com.lb'). '第二・第一レベルドメイン'('com.lr'). '第二・第一レベルドメイン'('com.lv'). '第二・第一レベルドメイン'('com.ly'). '第二・第一レベルドメイン'('com.m'). '第二・第一レベルドメイン'('com.mg'). '第二・第一レベルドメイン'('com.mk'). '第二・第一レベルドメイン'('com.mo'). '第二・第一レベルドメイン'('com.mt'). '第二・第一レベルドメイン'('com.mx'). '第二・第一レベルドメイン'('com.my'). '第二・第一レベルドメイン'('com.n'). '第二・第一レベルドメイン'('com.na'). '第二・第一レベルドメイン'('com.ng'). '第二・第一レベルドメイン'('com.ni'). '第二・第一レベルドメイン'('com.np'). '第二・第一レベルドメイン'('com.o'). '第二・第一レベルドメイン'('com.om'). '第二・第一レベルドメイン'('com.p'). '第二・第一レベルドメイン'('com.pa'). '第二・第一レベルドメイン'('com.pe'). '第二・第一レベルドメイン'('com.ph'). '第二・第一レベルドメイン'('com.pk'). '第二・第一レベルドメイン'('com.pl'). '第二・第一レベルドメイン'('com.pr'). '第二・第一レベルドメイン'('com.pt'). '第二・第一レベルドメイン'('com.py'). '第二・第一レベルドメイン'('com.q'). '第二・第一レベルドメイン'('com.qa'). '第二・第一レベルドメイン'('com.r'). '第二・第一レベルドメイン'('com.ro'). '第二・第一レベルドメイン'('com.s'). '第二・第一レベルドメイン'('com.sg'). '第二・第一レベルドメイン'('com.sn'). '第二・第一レベルドメイン'('com.sv'). '第二・第一レベルドメイン'('com.sy'). '第二・第一レベルドメイン'('com.t'). '第二・第一レベルドメイン'('com.tn'). '第二・第一レベルドメイン'('com.tr'). '第二・第一レベルドメイン'('com.tw'). '第二・第一レベルドメイン'('com.u'). '第二・第一レベルドメイン'('com.ua'). '第二・第一レベルドメイン'('com.uy'). '第二・第一レベルドメイン'('com.v'). '第二・第一レベルドメイン'('com.ve'). '第二・第一レベルドメイン'('com.vn'). '第二・第一レベルドメイン'(con). '第二・第一レベルドメイン'(cond). '第二・第一レベルドメイン'(condo). '第二・第一レベルドメイン'(condos). '第二・第一レベルドメイン'(cons). '第二・第一レベルドメイン'(consu). '第二・第一レベルドメイン'(consul). '第二・第一レベルドメイン'(consult). '第二・第一レベルドメイン'(consulti). '第二・第一レベルドメイン'(consultin). '第二・第一レベルドメイン'(consulting). '第二・第一レベルドメイン'(coo). '第二・第一レベルドメイン'(coop). '第二・第一レベルドメイン'(cor). '第二・第一レベルドメイン'(cors). '第二・第一レベルドメイン'(corsi). '第二・第一レベルドメイン'(corsic). '第二・第一レベルドメイン'(corsica). '第二・第一レベルドメイン'(cr). '第二・第一レベルドメイン'(cre). '第二・第一レベルドメイン'(cred). '第二・第一レベルドメイン'(credi). '第二・第一レベルドメイン'(credit). '第二・第一レベルドメイン'(cu). '第二・第一レベルドメイン'(cv). '第二・第一レベルドメイン'(cw). '第二・第一レベルドメイン'(cx). '第二・第一レベルドメイン'(cy). '第二・第一レベルドメイン'(cym). '第二・第一レベルドメイン'(cymr). '第二・第一レベルドメイン'(cymru). '第二・第一レベルドメイン'(cz). '第二・第一レベルドメイン'(d). '第二・第一レベルドメイン'(de). '第二・第一レベルドメイン'('de.'). '第二・第一レベルドメイン'('de.c'). '第二・第一レベルドメイン'('de.co'). '第二・第一レベルドメイン'('de.com'). '第二・第一レベルドメイン'(den). '第二・第一レベルドメイン'(dent). '第二・第一レベルドメイン'(denta). '第二・第一レベルドメイン'(dental). '第二・第一レベルドメイン'(dj). '第二・第一レベルドメイン'(dk). '第二・第一レベルドメイン'(dm). '第二・第一レベルドメイン'(do). '第二・第一レベルドメイン'(dow). '第二・第一レベルドメイン'(down). '第二・第一レベルドメイン'(downl). '第二・第一レベルドメイン'(downlo). '第二・第一レベルドメイン'(downloa). '第二・第一レベルドメイン'(download). '第二・第一レベルドメイン'(du). '第二・第一レベルドメイン'(dub). '第二・第一レベルドメイン'(duba). '第二・第一レベルドメイン'(dubai). '第二・第一レベルドメイン'(dz). '第二・第一レベルドメイン'(e). '第二・第一レベルドメイン'(ec). '第二・第一レベルドメイン'(eco). '第二・第一レベルドメイン'(ed). '第二・第一レベルドメイン'(edu). '第二・第一レベルドメイン'(ee). '第二・第一レベルドメイン'(eg). '第二・第一レベルドメイン'(em). '第二・第一レベルドメイン'(ema). '第二・第一レベルドメイン'(emar). '第二・第一レベルドメイン'(emara). '第二・第一レベルドメイン'(emarat). '第二・第一レベルドメイン'(es). '第二・第一レベルドメイン'(eu). '第二・第一レベルドメイン'('eu.'). '第二・第一レベルドメイン'('eu.c'). '第二・第一レベルドメイン'('eu.co'). '第二・第一レベルドメイン'('eu.com'). '第二・第一レベルドメイン'(ev). '第二・第一レベルドメイン'(eve). '第二・第一レベルドメイン'(even). '第二・第一レベルドメイン'(event). '第二・第一レベルドメイン'(events). '第二・第一レベルドメイン'(f). '第二・第一レベルドメイン'(fi). '第二・第一レベルドメイン'(fil). '第二・第一レベルドメイン'(film). '第二・第一レベルドメイン'(fl). '第二・第一レベルドメイン'(fli). '第二・第一レベルドメイン'(flig). '第二・第一レベルドメイン'(fligh). '第二・第一レベルドメイン'(flight). '第二・第一レベルドメイン'(flights). '第二・第一レベルドメイン'(fly). '第二・第一レベルドメイン'(fm). '第二・第一レベルドメイン'(fo). '第二・第一レベルドメイン'(foo). '第二・第一レベルドメイン'(food). '第二・第一レベルドメイン'(foot). '第二・第一レベルドメイン'(footb). '第二・第一レベルドメイン'(footba). '第二・第一レベルドメイン'(footbal). '第二・第一レベルドメイン'(football). '第二・第一レベルドメイン'(for). '第二・第一レベルドメイン'(foru). '第二・第一レベルドメイン'(forum). '第二・第一レベルドメイン'(fr). '第二・第一レベルドメイン'(fre). '第二・第一レベルドメイン'(free). '第二・第一レベルドメイン'(fri). '第二・第一レベルドメイン'(frie). '第二・第一レベルドメイン'(frien). '第二・第一レベルドメイン'(friend). '第二・第一レベルドメイン'(friends). '第二・第一レベルドメイン'(fu). '第二・第一レベルドメイン'(fun). '第二・第一レベルドメイン'(fund). '第二・第一レベルドメイン'(fut). '第二・第一レベルドメイン'(futb). '第二・第一レベルドメイン'(futbo). '第二・第一レベルドメイン'(futbol). '第二・第一レベルドメイン'(g). '第二・第一レベルドメイン'(ga). '第二・第一レベルドメイン'(gam). '第二・第一レベルドメイン'(game). '第二・第一レベルドメイン'(gay). '第二・第一レベルドメイン'(gd). '第二・第一レベルドメイン'(ge). '第二・第一レベルドメイン'(gen). '第二・第一レベルドメイン'(gent). '第二・第一レベルドメイン'(gf). '第二・第一レベルドメイン'(gg). '第二・第一レベルドメイン'(gl). '第二・第一レベルドメイン'(gm). '第二・第一レベルドメイン'(gmb). '第二・第一レベルドメイン'(gmbh). '第二・第一レベルドメイン'(go). '第二・第一レベルドメイン'(gol). '第二・第一レベルドメイン'(gold). '第二・第一レベルドメイン'(gov). '第二・第一レベルドメイン'(gp). '第二・第一レベルドメイン'(gr). '第二・第一レベルドメイン'('gr.'). '第二・第一レベルドメイン'('gr.c'). '第二・第一レベルドメイン'('gr.co'). '第二・第一レベルドメイン'('gr.com'). '第二・第一レベルドメイン'(gs). '第二・第一レベルドメイン'(gt). '第二・第一レベルドメイン'(gy). '第二・第一レベルドメイン'(h). '第二・第一レベルドメイン'(he). '第二・第一レベルドメイン'(hel). '第二・第一レベルドメイン'(hels). '第二・第一レベルドメイン'(helsi). '第二・第一レベルドメイン'(helsin). '第二・第一レベルドメイン'(helsink). '第二・第一レベルドメイン'(helsinki). '第二・第一レベルドメイン'(hi). '第二・第一レベルドメイン'(hiv). '第二・第一レベルドメイン'(hk). '第二・第一レベルドメイン'(hn). '第二・第一レベルドメイン'(ho). '第二・第一レベルドメイン'(hoc). '第二・第一レベルドメイン'(hock). '第二・第一レベルドメイン'(hocke). '第二・第一レベルドメイン'(hockey). '第二・第一レベルドメイン'(hol). '第二・第一レベルドメイン'(holi). '第二・第一レベルドメイン'(holid). '第二・第一レベルドメイン'(holida). '第二・第一レベルドメイン'(holiday). '第二・第一レベルドメイン'(hor). '第二・第一レベルドメイン'(hors). '第二・第一レベルドメイン'(horse). '第二・第一レベルドメイン'(hos). '第二・第一レベルドメイン'(hosp). '第二・第一レベルドメイン'(hospi). '第二・第一レベルドメイン'(hospit). '第二・第一レベルドメイン'(hospita). '第二・第一レベルドメイン'(hospital). '第二・第一レベルドメイン'(hot). '第二・第一レベルドメイン'(hote). '第二・第一レベルドメイン'(hotel). '第二・第一レベルドメイン'(hou). '第二・第一レベルドメイン'(hous). '第二・第一レベルドメイン'(house). '第二・第一レベルドメイン'(hr). '第二・第一レベルドメイン'(ht). '第二・第一レベルドメイン'(hu). '第二・第一レベルドメイン'(i). '第二・第一レベルドメイン'(ie). '第二・第一レベルドメイン'(im). '第二・第一レベルドメイン'(in). '第二・第一レベルドメイン'(inc). '第二・第一レベルドメイン'(inf). '第二・第一レベルドメイン'(info). '第二・第一レベルドメイン'(ins). '第二・第一レベルドメイン'(insu). '第二・第一レベルドメイン'(insur). '第二・第一レベルドメイン'(insure). '第二・第一レベルドメイン'(io). '第二・第一レベルドメイン'(iq). '第二・第一レベルドメイン'(ir). '第二・第一レベルドメイン'(iri). '第二・第一レベルドメイン'(iris). '第二・第一レベルドメイン'(irish). '第二・第一レベルドメイン'(is). '第二・第一レベルドメイン'(isl). '第二・第一レベルドメイン'(isla). '第二・第一レベルドメイン'(islam). '第二・第一レベルドメイン'(ist). '第二・第一レベルドメイン'(ista). '第二・第一レベルドメイン'(istan). '第二・第一レベルドメイン'(istanb). '第二・第一レベルドメイン'(istanbu). '第二・第一レベルドメイン'(istanbul). '第二・第一レベルドメイン'(it). '第二・第一レベルドメイン'(j). '第二・第一レベルドメイン'(je). '第二・第一レベルドメイン'(jo). '第二・第一レベルドメイン'(job). '第二・第一レベルドメイン'(jobs). '第二・第一レベルドメイン'(jp). '第二・第一レベルドメイン'(k). '第二・第一レベルドメイン'(kg). '第二・第一レベルドメイン'(ki). '第二・第一レベルドメイン'(kit). '第二・第一レベルドメイン'(kitc). '第二・第一レベルドメイン'(kitch). '第二・第一レベルドメイン'(kitche). '第二・第一レベルドメイン'(kitchen). '第二・第一レベルドメイン'(kn). '第二・第一レベルドメイン'(ko). '第二・第一レベルドメイン'(koe). '第二・第一レベルドメイン'(koel). '第二・第一レベルドメイン'(koeln). '第二・第一レベルドメイン'(kr). '第二・第一レベルドメイン'(ky). '第二・第一レベルドメイン'(kz). '第二・第一レベルドメイン'(l). '第二・第一レベルドメイン'(la). '第二・第一レベルドメイン'(lat). '第二・第一レベルドメイン'(law). '第二・第一レベルドメイン'(lc). '第二・第一レベルドメイン'(li). '第二・第一レベルドメイン'(lim). '第二・第一レベルドメイン'(limi). '第二・第一レベルドメイン'(limit). '第二・第一レベルドメイン'(limite). '第二・第一レベルドメイン'(limited). '第二・第一レベルドメイン'(lk). '第二・第一レベルドメイン'(lo). '第二・第一レベルドメイン'(lon). '第二・第一レベルドメイン'(lond). '第二・第一レベルドメイン'(londo). '第二・第一レベルドメイン'(london). '第二・第一レベルドメイン'(lot). '第二・第一レベルドメイン'(lott). '第二・第一レベルドメイン'(lotto). '第二・第一レベルドメイン'(lt). '第二・第一レベルドメイン'(lu). '第二・第一レベルドメイン'(lv). '第二・第一レベルドメイン'(ly). '第二・第一レベルドメイン'(m). '第二・第一レベルドメイン'(ma). '第二・第一レベルドメイン'(mc). '第二・第一レベルドメイン'(md). '第二・第一レベルドメイン'(me). '第二・第一レベルドメイン'(med). '第二・第一レベルドメイン'(medi). '第二・第一レベルドメイン'(medic). '第二・第一レベルドメイン'(medica). '第二・第一レベルドメイン'(medical). '第二・第一レベルドメイン'(mel). '第二・第一レベルドメイン'(melb). '第二・第一レベルドメイン'(melbo). '第二・第一レベルドメイン'(melbou). '第二・第一レベルドメイン'(melbour). '第二・第一レベルドメイン'(melbourn). '第二・第一レベルドメイン'(melbourne). '第二・第一レベルドメイン'(men). '第二・第一レベルドメイン'(menu). '第二・第一レベルドメイン'(mg). '第二・第一レベルドメイン'(mi). '第二・第一レベルドメイン'(mia). '第二・第一レベルドメイン'(miam). '第二・第一レベルドメイン'(miami). '第二・第一レベルドメイン'(mk). '第二・第一レベルドメイン'(mn). '第二・第一レベルドメイン'(mo). '第二・第一レベルドメイン'(mob). '第二・第一レベルドメイン'(mobi). '第二・第一レベルドメイン'(mos). '第二・第一レベルドメイン'(mosc). '第二・第一レベルドメイン'(mosco). '第二・第一レベルドメイン'(moscow). '第二・第一レベルドメイン'(mp). '第二・第一レベルドメイン'(ms). '第二・第一レベルドメイン'(mu). '第二・第一レベルドメイン'(mus). '第二・第一レベルドメイン'(musi). '第二・第一レベルドメイン'(music). '第二・第一レベルドメイン'(mv). '第二・第一レベルドメイン'(mw). '第二・第一レベルドメイン'(mx). '第二・第一レベルドメイン'(my). '第二・第一レベルドメイン'(n). '第二・第一レベルドメイン'(na). '第二・第一レベルドメイン'(nam). '第二・第一レベルドメイン'(name). '第二・第一レベルドメイン'(ne). '第二・第一レベルドメイン'(net). '第二・第一レベルドメイン'('net.'). '第二・第一レベルドメイン'('net.a'). '第二・第一レベルドメイン'('net.au'). '第二・第一レベルドメイン'('net.b'). '第二・第一レベルドメイン'('net.bn'). '第二・第一レベルドメイン'('net.br'). '第二・第一レベルドメイン'('net.c'). '第二・第一レベルドメイン'('net.cm'). '第二・第一レベルドメイン'('net.cn'). '第二・第一レベルドメイン'('net.g'). '第二・第一レベルドメイン'('net.gt'). '第二・第一レベルドメイン'('net.h'). '第二・第一レベルドメイン'('net.hk'). '第二・第一レベルドメイン'('net.i'). '第二・第一レベルドメイン'('net.il'). '第二・第一レベルドメイン'('net.m'). '第二・第一レベルドメイン'('net.mx'). '第二・第一レベルドメイン'('net.n'). '第二・第一レベルドメイン'('net.nz'). '第二・第一レベルドメイン'('net.p'). '第二・第一レベルドメイン'('net.ph'). '第二・第一レベルドメイン'('net.u'). '第二・第一レベルドメイン'('net.uk'). '第二・第一レベルドメイン'(new). '第二・第一レベルドメイン'(news). '第二・第一レベルドメイン'(nl). '第二・第一レベルドメイン'(no). '第二・第一レベルドメイン'(nom). '第二・第一レベルドメイン'('nom.'). '第二・第一レベルドメイン'('nom.e'). '第二・第一レベルドメイン'('nom.es'). '第二・第一レベルドメイン'(nr). '第二・第一レベルドメイン'(nu). '第二・第一レベルドメイン'(o). '第二・第一レベルドメイン'(or). '第二・第一レベルドメイン'(org). '第二・第一レベルドメイン'('org.'). '第二・第一レベルドメイン'('org.b'). '第二・第一レベルドメイン'('org.bn'). '第二・第一レベルドメイン'('org.c'). '第二・第一レベルドメイン'('org.cn'). '第二・第一レベルドメイン'('org.e'). '第二・第一レベルドメイン'('org.es'). '第二・第一レベルドメイン'('org.i'). '第二・第一レベルドメイン'('org.il'). '第二・第一レベルドメイン'('org.l'). '第二・第一レベルドメイン'('org.lv'). '第二・第一レベルドメイン'('org.n'). '第二・第一レベルドメイン'('org.nz'). '第二・第一レベルドメイン'('org.p'). '第二・第一レベルドメイン'('org.ph'). '第二・第一レベルドメイン'('org.pl'). '第二・第一レベルドメイン'('org.u'). '第二・第一レベルドメイン'('org.uk'). '第二・第一レベルドメイン'(orga). '第二・第一レベルドメイン'(organ). '第二・第一レベルドメイン'(organi). '第二・第一レベルドメイン'(organic). '第二・第一レベルドメイン'(p). '第二・第一レベルドメイン'(pa). '第二・第一レベルドメイン'(par). '第二・第一レベルドメイン'(pari). '第二・第一レベルドメイン'(paris). '第二・第一レベルドメイン'(pe). '第二・第一レベルドメイン'(ph). '第二・第一レベルドメイン'(pho). '第二・第一レベルドメイン'(phot). '第二・第一レベルドメイン'(photo). '第二・第一レベルドメイン'(pi). '第二・第一レベルドメイン'(pin). '第二・第一レベルドメイン'(pink). '第二・第一レベルドメイン'(piz). '第二・第一レベルドメイン'(pizz). '第二・第一レベルドメイン'(pizza). '第二・第一レベルドメイン'(pk). '第二・第一レベルドメイン'(pl). '第二・第一レベルドメイン'(pm). '第二・第一レベルドメイン'(pn). '第二・第一レベルドメイン'(po). '第二・第一レベルドメイン'(pok). '第二・第一レベルドメイン'(poke). '第二・第一レベルドメイン'(poker). '第二・第一レベルドメイン'(por). '第二・第一レベルドメイン'(porn). '第二・第一レベルドメイン'(pr). '第二・第一レベルドメイン'(pro). '第二・第一レベルドメイン'(ps). '第二・第一レベルドメイン'(pt). '第二・第一レベルドメイン'(pu). '第二・第一レベルドメイン'(pub). '第二・第一レベルドメイン'(pw). '第二・第一レベルドメイン'(q). '第二・第一レベルドメイン'(qa). '第二・第一レベルドメイン'(qu). '第二・第一レベルドメイン'(que). '第二・第一レベルドメイン'(queb). '第二・第一レベルドメイン'(quebe). '第二・第一レベルドメイン'(quebec). '第二・第一レベルドメイン'(r). '第二・第一レベルドメイン'(re). '第二・第一レベルドメイン'(rei). '第二・第一レベルドメイン'(reis). '第二・第一レベルドメイン'(reise). '第二・第一レベルドメイン'(rep). '第二・第一レベルドメイン'(repo). '第二・第一レベルドメイン'(repor). '第二・第一レベルドメイン'(report). '第二・第一レベルドメイン'(res). '第二・第一レベルドメイン'(rest). '第二・第一レベルドメイン'(resta). '第二・第一レベルドメイン'(restau). '第二・第一レベルドメイン'(restaur). '第二・第一レベルドメイン'(restaura). '第二・第一レベルドメイン'(restauran). '第二・第一レベルドメイン'(restaurant). '第二・第一レベルドメイン'(ro). '第二・第一レベルドメイン'(rom). '第二・第一レベルドメイン'(roma). '第二・第一レベルドメイン'(rs). '第二・第一レベルドメイン'(ru). '第二・第一レベルドメイン'(rug). '第二・第一レベルドメイン'(rugb). '第二・第一レベルドメイン'(rugby). '第二・第一レベルドメイン'(ruh). '第二・第一レベルドメイン'(ruhr). '第二・第一レベルドメイン'(rw). '第二・第一レベルドメイン'(s). '第二・第一レベルドメイン'(sa). '第二・第一レベルドメイン'(sc). '第二・第一レベルドメイン'(sco). '第二・第一レベルドメイン'(scot). '第二・第一レベルドメイン'(sd). '第二・第一レベルドメイン'(se). '第二・第一レベルドメイン'(sec). '第二・第一レベルドメイン'(secu). '第二・第一レベルドメイン'(secur). '第二・第一レベルドメイン'(secure). '第二・第一レベルドメイン'(sg). '第二・第一レベルドメイン'(sh). '第二・第一レベルドメイン'(sho). '第二・第一レベルドメイン'(shoe). '第二・第一レベルドメイン'(shoes). '第二・第一レベルドメイン'(shop). '第二・第一レベルドメイン'(si). '第二・第一レベルドメイン'(sk). '第二・第一レベルドメイン'(ska). '第二・第一レベルドメイン'(skat). '第二・第一レベルドメイン'(skate). '第二・第一レベルドメイン'(ski). '第二・第一レベルドメイン'(sl). '第二・第一レベルドメイン'(sm). '第二・第一レベルドメイン'(sn). '第二・第一レベルドメイン'(so). '第二・第一レベルドメイン'(sp). '第二・第一レベルドメイン'(spa). '第二・第一レベルドメイン'(spac). '第二・第一レベルドメイン'(space). '第二・第一レベルドメイン'(spo). '第二・第一レベルドメイン'(spor). '第二・第一レベルドメイン'(sport). '第二・第一レベルドメイン'(sr). '第二・第一レベルドメイン'(st). '第二・第一レベルドメイン'(sto). '第二・第一レベルドメイン'(stoc). '第二・第一レベルドメイン'(stock). '第二・第一レベルドメイン'(stockh). '第二・第一レベルドメイン'(stockho). '第二・第一レベルドメイン'(stockhol). '第二・第一レベルドメイン'(stockholm). '第二・第一レベルドメイン'(su). '第二・第一レベルドメイン'(sup). '第二・第一レベルドメイン'(supp). '第二・第一レベルドメイン'(suppo). '第二・第一レベルドメイン'(suppor). '第二・第一レベルドメイン'(support). '第二・第一レベルドメイン'(sur). '第二・第一レベルドメイン'(surf). '第二・第一レベルドメイン'(sv). '第二・第一レベルドメイン'(sx). '第二・第一レベルドメイン'(sy). '第二・第一レベルドメイン'(syd). '第二・第一レベルドメイン'(sydn). '第二・第一レベルドメイン'(sydne). '第二・第一レベルドメイン'(sydney). '第二・第一レベルドメイン'(t). '第二・第一レベルドメイン'(ta). '第二・第一レベルドメイン'(tat). '第二・第一レベルドメイン'(tatt). '第二・第一レベルドメイン'(tatto). '第二・第一レベルドメイン'(tattoo). '第二・第一レベルドメイン'(tc). '第二・第一レベルドメイン'(td). '第二・第一レベルドメイン'(te). '第二・第一レベルドメイン'(tel). '第二・第一レベルドメイン'(ten). '第二・第一レベルドメイン'(tenn). '第二・第一レベルドメイン'(tenni). '第二・第一レベルドメイン'(tennis). '第二・第一レベルドメイン'(tf). '第二・第一レベルドメイン'(tg). '第二・第一レベルドメイン'(th). '第二・第一レベルドメイン'(tha). '第二・第一レベルドメイン'(thai). '第二・第一レベルドメイン'(ti). '第二・第一レベルドメイン'(tir). '第二・第一レベルドメイン'(tiro). '第二・第一レベルドメイン'(tirol). '第二・第一レベルドメイン'(tj). '第二・第一レベルドメイン'(tk). '第二・第一レベルドメイン'(tl). '第二・第一レベルドメイン'(tm). '第二・第一レベルドメイン'(tn). '第二・第一レベルドメイン'(to). '第二・第一レベルドメイン'(tok). '第二・第一レベルドメイン'(toky). '第二・第一レベルドメイン'(tokyo). '第二・第一レベルドメイン'(tr). '第二・第一レベルドメイン'(tra). '第二・第一レベルドメイン'(trai). '第二・第一レベルドメイン'(train). '第二・第一レベルドメイン'(traini). '第二・第一レベルドメイン'(trainin). '第二・第一レベルドメイン'(training). '第二・第一レベルドメイン'(trav). '第二・第一レベルドメイン'(trave). '第二・第一レベルドメイン'(travel). '第二・第一レベルドメイン'(tv). '第二・第一レベルドメイン'(tw). '第二・第一レベルドメイン'(u). '第二・第一レベルドメイン'(ua). '第二・第一レベルドメイン'(ug). '第二・第一レベルドメイン'(uk). '第二・第一レベルドメイン'('uk.'). '第二・第一レベルドメイン'('uk.c'). '第二・第一レベルドメイン'('uk.co'). '第二・第一レベルドメイン'('uk.com'). '第二・第一レベルドメイン'(us). '第二・第一レベルドメイン'('us.'). '第二・第一レベルドメイン'('us.c'). '第二・第一レベルドメイン'('us.co'). '第二・第一レベルドメイン'('us.com'). '第二・第一レベルドメイン'('us.o'). '第二・第一レベルドメイン'('us.or'). '第二・第一レベルドメイン'('us.org'). '第二・第一レベルドメイン'(uy). '第二・第一レベルドメイン'(uz). '第二・第一レベルドメイン'(v). '第二・第一レベルドメイン'(vc). '第二・第一レベルドメイン'(vg). '第二・第一レベルドメイン'(vi). '第二・第一レベルドメイン'(via). '第二・第一レベルドメイン'(viaj). '第二・第一レベルドメイン'(viaje). '第二・第一レベルドメイン'(viajes). '第二・第一レベルドメイン'(vn). '第二・第一レベルドメイン'(vo). '第二・第一レベルドメイン'(voy). '第二・第一レベルドメイン'(voya). '第二・第一レベルドメイン'(voyag). '第二・第一レベルドメイン'(voyage). '第二・第一レベルドメイン'(w). '第二・第一レベルドメイン'(wa). '第二・第一レベルドメイン'(wal). '第二・第一レベルドメイン'(wale). '第二・第一レベルドメイン'(wales). '第二・第一レベルドメイン'(we). '第二・第一レベルドメイン'(web). '第二・第一レベルドメイン'('web.'). '第二・第一レベルドメイン'('web.d'). '第二・第一レベルドメイン'('web.do'). '第二・第一レベルドメイン'(wf). '第二・第一レベルドメイン'(wi). '第二・第一レベルドメイン'(wie). '第二・第一レベルドメイン'(wien). '第二・第一レベルドメイン'(win). '第二・第一レベルドメイン'(wine). '第二・第一レベルドメイン'(ws). '第二・第一レベルドメイン'(x). '第二・第一レベルドメイン'(xx). '第二・第一レベルドメイン'(xxx). '第二・第一レベルドメイン'(y). '第二・第一レベルドメイン'(yt). '第二・第一レベルドメイン'('м'). '第二・第一レベルドメイン'('мо'). '第二・第一レベルドメイン'('мос'). '第二・第一レベルドメイン'('моск'). '第二・第一レベルドメイン'('москв'). '第二・第一レベルドメイン'('москва'). '第二・第一レベルドメイン'('р'). '第二・第一レベルドメイン'('рф'). '第二・第一レベルドメイン'('с'). '第二・第一レベルドメイン'('ср'). '第二・第一レベルドメイン'('срб'). '第二・第一レベルドメイン'('香'). '第二・第一レベルドメイン'('香港'). '第二・第一レベルドメイン'('中'). '第二・第一レベルドメイン'('中国'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/754 # # 会議室予約のようなシステムを作っています。 # # 前提として、 # Username,Email,Passwordなどのカラムを持つUserテーブルがあり、 # # さらに、それぞれのユーザーが # # Aさん # # 10日月曜日 13:00-14:00 # 13日木曜日 15:00-16:00 # 14日金曜日 20:00-21:00 # 。 # 。 # # などのように時間の枠をいくつか指定して予約できるようにしたいです。 # # この場合、こうやった時間のデータをどのように保持するのが理想でしょうか # # 使用しているデータベースはmysqlです。 # # :- dynamic(['User'/3,会議室予約/3]). '会議室予約のようなシステムを作っています。 前提として、 Username,Email,Passwordなどのカラムを持つUserテーブルがあり、 さらに、それぞれのユーザーが Aさん 10日月曜日 13:00-14:00 13日木曜日 15:00-16:00 14日金曜日 20:00-21:00 。 。 などのように時間の枠をいくつか指定して予約できるようにしたいです。'(_Username,_Password,_利用開始時刻,_利用終了時刻) :- 会議室予約の照会(_Username,_Password,_利用開始時刻,_利用終了時刻). 会議室予約の照会(_Username,_Password,_利用開始時刻,_利用終了時刻) :- '_Username,_Passwordは存在する'(_Username,_Password), 会議室を予約する(_Username,_利用開始時刻,_利用終了時刻). '_Username,_Passwordは存在する'(_Username,_Password) :- 'User'(_Username,_Email,_Password),!. '_Username,_Passwordは存在する'(_Username,_Password) :- format('Username,Passwordが正しくありません。訂正して照会してください\n',[_Username,_Password]), fail. 会議室を予約する(_Username,_利用開始時刻,_利用終了時刻) :- 会議室予約(_Username_1,_利用開始時刻_1,_利用終了時刻_1), 予約期間の会議室は既に予約済みである(_Username,_利用開始時刻,_利用終了時刻,_Username_1,_利用開始時刻_1,_利用終了時刻_1), writef('%tから%tまでの期間は既に予約済みです\n',[_利用開始時刻,_利用終了時刻]),!. 会議室を予約する(_Username,_利用開始時刻,_利用終了時刻) :- assertz(会議室予約(_Username,_利用開始時刻,_利用終了時刻)), writef('%tから%tまでの期間の予約を完了しました。\n',[_利用開始時刻,_利用終了時刻]). 予約期間の会議室は既に予約済みである(_Username,_利用開始時刻,_利用終了時刻,_Username_1,_利用開始時刻_1,_利用終了時刻_1) :- _利用開始時刻_1 @=< _利用開始時刻, _利用終了時刻_1 @>= _利用終了時刻,!. 予約期間の会議室は既に予約済みである(_Username,_利用開始時刻,_利用終了時刻,_Username_1,_利用開始時刻_1,_利用終了時刻_1) :- _利用開始時刻_1 @=< _利用開始時刻, _利用終了時刻_1 @> _利用開始時刻,!. 予約期間の会議室は既に予約済みである(_Username,_利用開始時刻,_利用終了時刻,_Username_1,_利用開始時刻_1,_利用終了時刻_1) :- _利用開始時刻_1 @< _利用終了時刻, _利用終了時刻_1 @> _利用開始時刻,!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/747 # # MySQL 5.5.29 # # ┏━┳━━┳━━┓ # ┃no┃.date┃名前┃ # ┣━╋━━╋━━┫ # ┃.1 ┃12-3┃榊  ┃ # ┣━╋━━╋━━┫ # ┃.2 ┃12-3┃山下┃ # ┣━╋━━╋━━┫ # ┃.3 ┃12-3┃斎藤┃ # ┣━╋━━╋━━┫ # ┃.4 ┃12-4┃山下┃ # ┣━╋━━╋━━┫ # ┃.5 ┃12-4┃斎藤┃ # ┗━┻━━┻━━┛ # # result: # no:1 # 名前:榊 # # このようなテーブルデータから、12-4に対して絞込みを行った際、前日に名前があり、当日に名前の消えているデータを抽出したいと思っています。 # 当初は2回SQLを実行しPHPで配列に流しこみそこで比較していたのですが処理の遅さが気になり、どうにかデータベース内で完結出来ないかと思い質問に来ました。 # 宜しくお願いします。 # 'このようなテーブルデータから、12-4に対して絞込みを行った際、前日に名前があり、当日に名前の消えているデータを抽出したい'(_絞込みdate,_名前) :- 前日に名前があり(_絞込みdate,_前日に名前があり), 当日に名前の消えている(_絞込みdate,_前日に名前があり,_当日に名前の消えている), データを抽出したい(_当日に名前の消えている,_名前). 前日に名前があり(_当日,_前日に名前があり) :- findmax(_date,( テーブル(_no,_date,_), _date @< _当日), _事実上の前日), setof(_名前,[_no,_事実上の前日,_名前] ^ ( テーブル(_no,_事実上の前日,_名前)), _前日に名前があり). 当日に名前の消えている(_当日,_前日に名前があり,_当日に名前の消えている) :- setof(_名前,[_no,_当日,_名前] ^ ( member(_名前,_前日に名前があり), \+(テーブル(_no,_当日,_名前))), _当日に名前の消えている). データを抽出したい(_当日に名前の消えている,_名前) :- member(_名前,_当日に名前の消えている). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/735 # # 日記のテーブル(tD) # id,title,main_text # 日記の写真のテーブル(tF) # id,diaryId,file_path,is_deleted,is_finished # # 以上のようなテーブルがあり、tD.id = tD.diaryIdの関係です # この状況で、日記のタイトル・文章とその日記に属する写真情報のセットを取得したいとき # left joinで on tD.id = tD.diaryId としてクエリしたら良いと思いますが # 以下の条件がついた時にどうしたら良いかわかりません # # 条件1:tFのデータは、一つの日記に対して複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得 # 条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。 # 条件3:写真情報をもたないテキスト情報も存在する。 # # 条件1はwhereに tF.is_finished = 1 AND tF.is_deleted =0 として書けば満たせますが、 # こう書いてしまうと条件2と3を満たせなくなります(写真情報のない日記を抜き出せなくなる) # どうしたら良いんでしょうか、すみませんがよろしくお願いします # # '日記テキスト・日記写真の取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :- 日記(_diaryId,_title,_main_text), 条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished). 条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1) :- '条件1:tFのデータは、一つの日記に対し複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1). 条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :- '条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished). 条件(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished) :- '条件3:写真情報をもたないテキスト情報も存在する。'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,_is_deleted,_is_finished). '条件1:tFのデータは、一つの日記に対し複数のデータを持ち、そのうちis_finishedが1かつis_deletedが0のモノだけを取得'(_diaryId,_title,_main_text,_id,_diaryId,_file_path,0,1) :- 日記の写真(_id,_diaryId,_file_path,0,1). '条件2:条件1を満たせる写真情報がなければ、写真情報は必要ない。日記のテキスト情報だけを取得する。'(_diaryId,_title,_main_text,'','','','','') :- 日記の写真(_id,_diaryId,_file_path,_is_deleted,_is_finished), \+((_is_deleted=0,_is_finished=1)). '条件3:写真情報をもたないテキスト情報も存在する。'(_diaryId,_title,_main_text,'','','','','') :- \+(日記の写真(_,_diaryId,_,_,_)). % 以下のサイトは # # mysql 5.5.9 # master # code # last_tradingdate # # data_tbl # code # data1 # tradingdate # # で、data_tblにはcode毎に取引日が入っています # それでmasterのlast_tradingdateにcode毎の入力最新日をセット # したいのですが、どう書けばいいんでしょうか。 :- dynamic(master/2,data_tbl/3). 'master code last_tradingdate data_tbl code data1 tradingdate で、data_tblにはcode毎に取引日が入っています それでmasterのlast_tradingdateにcode毎の入力最新日をセット したいのですが、どう書けばいいんでしょうか。' :- findall([_code,_最終取引日],( master(_code,_), findmax(_trandingdate,( data_tble(_code,_,_tradingdate)), _最終取引日)), LL), masterの_last_tradingdateを書き換える(LL). masterの_last_tradingdateを書き換える(LL) :- append(_,[[_code,_最終取引日]|R],LL), retract(master(_code,_)), assertz(master(_code,_最終取引日)), R = []. % 以下のサイトは # # mysql 5.5.9 # master # code # last_tradingdate # # data_tbl # code # data1 # tradingdate # # で、data_tblにはcode毎に取引日が入っています # それでmasterのlast_tradingdateにcode毎の入力最新日をセット # したいのですが、どう書けばいいんでしょうか。 :- dynamic(master/2,data_tbl/3). 'master code last_tradingdate data_tbl code data1 tradingdate で、data_tblにはcode毎に取引日が入っています それでmasterのlast_tradingdateにcode毎の入力最新日をセット したいのですが、どう書けばいいんでしょうか。' :- masterのcodeごとにdata_tblから最終取引日を採集して(_code_最終取引日ならび), masterの_last_tradingdateを書き換える(_code_最終取引日ならび). masterのcodeごとにdata_tblから最終取引日を採集して(_code_最終取引日ならび) :- findall([_code,_最終取引日],( master(_code,_last_trandingdate), date_tblの最終取引日を得る(_code,_last_trandingdate,_最終取引日)),_code_最終取引日ならび). date_tblの最終取引日を得る(_code,_last_trandingdate,_最終取引日) :- findmax(_trandingdate,( '_last_trandingdateより大きいdata_tblの_trandingdate'(_code,_last_trandingdate,_trandingdate)),_最終取引日). '_last_trandingdateより大きいdata_tblの_trandingdate'(_code,_last_trandingdate,_trandingdate) :- data_tbl(_code,_,_tradingdate), _trandingdate @> _last_trandingdate. masterの_last_tradingdateを書き換える(_code_最終取引日ならび) :- forall(member([_code,_最終取引日],_code_最終取引日ならび),masterの更新(_code,_最終取引日)). masterの更新(_code,_最終取引日) :- 一旦master節を削除して(_code), '_codeと最終取引日を追加する'(_code,_最終取引日). 一旦master節を削除して(_code) :- retract(master(_code,_)). '_codeと最終取引日を追加する'(_code,_最終取引日) :- assertz(master(_code,_最終取引日)). findmax(A,B,C) :- findall(A,B,L), max_list(L,C). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/705 # # SQL SERVER 2010ですが # TOP 2を求めて残りをその他として合計表示したいです。 # よろしくお願いします。 # # 元のデータ # 列1 # A # A # A # B # B # C # D # # 求めたい結果 # A 3 # B 2 # その他 2 # # 'TOP 2を求めて残りをその他として合計表示したい'(_A,_B,_その他) :- setof(_列1,[_列1] ^ テーブル(_列1),_一意の列1ならび), 'TOP 2を求めて'(_一意の列1ならび,_A,_B,R), '残りをその他として合計表示したい'(R,_その他). 'TOP 2を求めて'(_一意の列1ならび,_A,_B,R) :- findall([_度数,_列1],( member(_列1,_一意の列1ならび), count(テーブル(_列1),_度数)), LL), sort(LL1,LL2), append(R,[_B,_A],LL2). '残りをその他として合計表示したい'(R,_その他) :- findsum(_度数,member([_度数,_],R),_その他). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/684 # # ・DBMS名とバージョン # Oracle 10g # ・テーブルデーた # create table aaa ( # id number(5,0) primary key, -- 主キー # nendo char(4), -- 年度 # tsuki char(2) -- 月 # ); # insert into aaa values (1, '2012', '01'); # insert into aaa values (2, '2012', '02'); # insert into aaa values (3, '2012', '03'); # insert into aaa values (4, '2012', '04'); # insert into aaa values (5, '2012', '05'); # ・欲しい結果 # id, nendo, tsuki # -------------------- # 4, '2012', '04' # 5, '2012', '05, # 1, '2012', '01' # 2, '2012', '02' # 3, '2012', '03' # # ・説明 # 年度/月の昇順に並べたいです。 # 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。 # '・テーブルデータ create table aaa ( id number(5,0) primary key, -- 主キー nendo char(4), -- 年度 tsuki char(2) -- 月 ); insert into aaa values (1, '2012', '01'); insert into aaa values (2, '2012', '02'); insert into aaa values (3, '2012', '03'); insert into aaa values (4, '2012', '04'); insert into aaa values (5, '2012', '05'); ・欲しい結果 id, nendo, tsuki -------------------- 4, '2012', '04' 5, '2012', '05, 1, '2012', '01' 2, '2012', '02' 3, '2012', '03' ・説明 年度/月の昇順に並べたいです。 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。'(_id,_年度,_月) :- 欲しい結果(_id,_年度,_月). 欲しい結果(_id,_年度,_月) :- setof(_年度,[_id,_年度,_月] ^ aaa(_id,_年度,_月),_年度ならび), member(_年度,_年度ならび), 年度順に並べる(['04','05','06','07','08','09','10','11','12','01','02','03'],_id,_年度,_月). 年度順に並べる([_月|R],_id,_年度,_月) :- aaa(_id,_年度,_月). 年度順に並べる([_|R],_id,_年度,_月) :- 年度順に並べる(R,_id,_年度,_月). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/684 # # ・DBMS名とバージョン # Oracle 10g # ・テーブルデーた # create table aaa ( # id number(5,0) primary key, -- 主キー # nendo char(4), -- 年度 # tsuki char(2) -- 月 # ); # insert into aaa values (1, '2012', '01'); # insert into aaa values (2, '2012', '02'); # insert into aaa values (3, '2012', '03'); # insert into aaa values (4, '2012', '04'); # insert into aaa values (5, '2012', '05'); # ・欲しい結果 # id, nendo, tsuki # -------------------- # 4, '2012', '04' # 5, '2012', '05, # 1, '2012', '01' # 2, '2012', '02' # 3, '2012', '03' # # ・説明 # 年度/月の昇順に並べたいです。 # 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。 # '・テーブルデータ create table aaa ( id number(5,0) primary key, -- 主キー nendo char(4), -- 年度 tsuki char(2) -- 月 ); insert into aaa values (1, '2012', '01'); insert into aaa values (2, '2012', '02'); insert into aaa values (3, '2012', '03'); insert into aaa values (4, '2012', '04'); insert into aaa values (5, '2012', '05'); ・欲しい結果 id, nendo, tsuki -------------------- 4, '2012', '04' 5, '2012', '05, 1, '2012', '01' 2, '2012', '02' 3, '2012', '03' ・説明 年度/月の昇順に並べたいです。 2012年度3月は2013年3月、2012年度4月は2012年4月となるのでただの大小比較では無理でした。'(_id,_年度,_月) :- 欲しい結果(_id,_年度,_月). 年度の場合の月順('04','05'). 年度の場合の月順('05','06'). 年度の場合の月順('06','07'). 年度の場合の月順('07','08'). 年度の場合の月順('08','09'). 年度の場合の月順('09','10'). 年度の場合の月順('10','11'). 年度の場合の月順('11','12'). 年度の場合の月順('12','01'). 年度の場合の月順('01','02'). 年度の場合の月順('02','03'). 年度の場合の月順('03','04'). 欲しい結果(_id,_年度,_月) :- setof(_年度,[_id,_年度,_月] ^ aaa(_id,_年度,_月),_年度ならび), member(_年度,_年度ならび), 年度順に並べる('04',_id,_年度,_月). 年度順に並べる(_月,_id,_年度,_月) :- aaa(_id,_年度,_月). 年度順に並べる(_月_1,_id,_年度,_月) :- \+(_月_1 = '03'), 年度の場合の月順(_月,_次の月), 年度順に並べる(_次の月,_id,_年度,_月). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/662 # # 1つのupdate文に set と条件 の組を複数指定できませんか。 # update table_foo # set x = new1 where x = old1, # set y = new2 where y = old2, # set z = new3 where y = old3 # みたいなことがしたい。 # # :- dynamic(table_foo/3). '1つのupdate文に set と条件 の組を複数指定できませんか。 update table_foo set x = new1 where x = old1, set y = new2 where y = old2, set z = new3 where y = old3 みたいなことがしたい。'(_x_1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3) :- retract(table_foo(_x_1,_y_1,_z_1)), 更新_1(_x_1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z). assertz(table_foo(_x,_y,_z)). 更新_1(_old1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z) :- 更新_2(_new1,_y_1,_z_1,_old1,_old2,_old3,_new1,_new2,_new3,_x,_y,_z),!. 更新_1(_x_1,_y_1,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z) :- 更新_2(_x_1,_y_1,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z). 更新_2(_x,_old2,_z_1,_,_old2,_old3,_,_new2,_new3,_x,_y,_z) :- 更新_3(_x,_new2,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z),!. 更新_2(_x,_y,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z) :- 更新_3(_x,_y,_z_1,_,_,_old3,_,_,_new3,_x,_y,_z). 更新_3(_x,_y,_old3,_,_,_old3,_,_,_new3,_x,_y,_new3) :- !. 更新_3(_x,_y,_z,_,_,_,_,_,_,_x,_y,_z). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/672 # # mySQL 5.5.27 # # 年  季節 記号 # 2008 Spring CS # 2008 Fall MTH # 2008 Fall MTH # 2009 Spring CS # 2014 Winter CS # 2014 Summer MTH # 2014 Spring CS # 2014 Fall CS # # このテーブルの季節部分をSpring, Summer,Fall,Winterの順に並べかえたいのですが、どのようにクエリーを書けばよいでしょうか?よろしくお願いいたします。 # # '年  季節 記号 2008 Spring CS 2008 Fall MTH 2008 Fall MTH 2009 Spring CS 2014 Winter CS 2014 Summer MTH 2014 Spring CS 2014 Fall CS このテーブルの季節部分をSpring, Summer,Fall,Winterの順に並べかえたいのですが、どのようにクエリーを書けばよいでしょうか?よろしくお願いいたします。'(_年,_季節,_記号) :- member(_季節,['Spring','Summer','Fall','Winter']), テーブル(_年,_季節,_記号). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/669 # # oracleなんですが、次の表に # # 日付 数 # 1/1 5 # 1/2 2 # 1/3 -8 # 1/4 6 # 1/5 8 # # 残と繰越を計算して↓のようにしたいのですが # どのようなSQLにすればいいでしょうか?>< # # 日付 残 数 繰越 # 1/1 0 5 5 ←初日の残はゼロ、繰越=残+数 # 1/2 5 2 7 ←残=前日の繰越 # 1/3 7 -8 -1 # 1/4 0 6 6 ←前日の繰越がマイナスなら残はゼロに # 1/5 6 8 14 # # テーブル('1/1',5). テーブル('1/2',2). テーブル('1/3',-8). テーブル('1/4',6). テーブル('1/5',8). '1/1の期首残'(0). 'oracleなんですが、次の表に 日付 数 1/1 5 1/2 2 1/3 -8 1/4 6 1/5 8 残と繰越を計算して↓のようにしたいのです どのようなSQLにすればいいでしょうか?>< 日付 残 数 繰越 1/1 0 5 5 ←初日の残はゼロ、繰越=残+数 1/2 5 2 7 ←残=前日の繰越 1/3 7 -8 -1 1/4 0 6 6 ←前日の繰越がマイナスなら残はゼロに 1/5 6 8 14'(_日付,_残,_数,_繰越) :- '1/1の期首残'(_期首残), findall([_日付,_数],( テーブル(_日付,_数)), _日付_数ならび), 残と繰越を計算する(_期首残,_日付_数ならび,_日付,_残,_数,_繰越). 残と繰越を計算する(_期首残,_日付_数ならび,_日付,_残,_数,_繰越) :- append(L0,[[_日付,_数]|_],_日付_数ならび), 調整前の残を求める([[_,_期首残]|L0],_調整前の残), 残と繰越の調整(_調整前の残,_数,_残,_繰越). 調整前の残を求める(LL,_調整前の残) :- findall(_数,member([_,_数],LL),_数ならび), sum_list(_数ならび,_調整前の残). 残と繰越の調整(_残,_数,_残,_繰越) :- _残 >= 0, _繰越 is _残 + _数,!. 残と繰越の調整(_残_1,_数,0,_数) :- _残_1 < 0. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/659 # # A_table # # ID | title | keyword # ------------------- # 1 | いうえ | あいうえお # 2 | きくけ | かきくけこ # 3 | しすせ | さしすせそ # # select * from A_table where "あいうえお" like "%titel%" # # 結果を # ID 1 の "いうえ" を結果としてだしたいのですが、 # WEBで入力した文字列の中に titleの中身を like検索してヒットする物をだしたい感じです。 # # MYSQLですが、、なかなかいい方法がわからなくて・・・ # 'A_table ID | title | data ------------------- 1 | いうえ | あいうえお 2 | きくけ | かきくけこ 3 | しすせ | さしすせそ select * from A_table where "あいうえお" like "%titel%" 結果を ID 1 の "いうえ" を結果としてだしたいのですが、 WEBで入力した文字列の中に titleの中身を like検索してヒットする物をだしたい感じです。'(_WEBで入力した文字列,_ID,_title,_data) :- 'A_table'(_ID,_title,_data), sub_atom(_WEBで入力した文字列,_,_,_,_title). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). 月順序('04','05'). 月順序('05','06'). 月順序('06','07'). 月順序('07','08'). 月順序('08','09'). 月順序('09','10'). 月順序('10','11'). 月順序('11','12'). 月順序('12','01'). 月順序('01','02'). 月順序('02','03'). 月順序('03','00'). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- 月別件数を得る('04',_月別件数ならび), 累計表示(_月別件数ならび,0,_月,_累計件数). 月別件数を得る('00',[]). 月別件数を得る(_月,[[_月,_件数]|R2]) :- '2010年度データ'(_月,_件数), 月順序(_月,_月_2), 月別件数を得る(_月_2,R2). 累計表示([[_月,_件数]|R1],_累計件数_1,_月,_累計件数) :- _累計件数 is _累計件数_1 + _件数. 累計表示([[_,_件数]|R1],_累計件数_1,_月,_累計件数) :- _累計件数_2 is _累計件数_1 + _件数, 累計表示(R1,_累計件数_2,_月,_累計件数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- _月順序 = ['04','05','06','07','08','09','10','11','12','01','02','03'], findall(_件数,( member(_月,_月順序), '2010年度データ'(_月,_件数)), _月別件数), 累計表示(_月順序,_月別件数,_月,_累計件数). 累計表示(_月順序,_月別件数,_月,_累計件数) :- append(L1,[_件数|R],_月別件数), length(L1,_nth0), nth0(_nth0,_月順序,_月), sum([_件数|L1],_累計件数). sum([],0). sum([N|R],S) :- sum(R,S_1), S is S_1 + N. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- _月順序 = ['04','05','06','07','08','09','10','11','12','01','02','03'], 月別件数を得る(_月順序,_月別件数), 累計表示(_月順序,_月別件数,_月,_累計件数). 月別件数を得る([],[]). 月別件数を得る([_月|R1],[_件数|R2]) :- '2010年度データ'(_月,_件数), 月別件数を得る(R1,R2). 累計表示(_月順序,_月別件数,_月,_累計件数) :- append(L1,[_件数|R],_月別件数), length(L1,_nth0), nth0(_nth0,_月順序,_月), sum([_件数|L1],_累計件数). sum([],0). sum([N|R],S) :- sum(R,S_1), S is S_1 + N. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- _月順序 = ['04','05','06','07','08','09','10','11','12','01','02','03'], findall(_件数,( member(_月,_月順序), '2010年度データ'(_月,_件数)), _月別件数), 累計表示(_月順序,_月別件数,0,_月,_累計件数). 累計表示([_月|R1],[_件数|R2],_累計件数_1,_月,_累計件数) :- _累計件数 is _累計件数_1 + _件数. 累計表示([_|R1],[_件数|R2],_累計件数_1,_月,_累計件数) :- _累計件数_2 is _累計件数_1 + _件数, 累計表示(R1,R2,_累計件数_2,_月,_累計件数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- _月順序 = ['04','05','06','07','08','09','10','11','12','01','02','03'], 月別件数を得る(_月順序,_月別件数), 累計表示(_月順序,_月別件数,0,_月,_累計件数). 月別件数を得る([],[]). 月別件数を得る([_月|R1],[_件数|R2]) :- '2010年度データ'(_月,_件数), 月別件数を得る(R1,R2). 累計表示([_月|R1],[_件数|R2],_累計件数_1,_月,_累計件数) :- _累計件数 is _累計件数_1 + _件数. 累計表示([_|R1],[_件数|R2],_累計件数_1,_月,_累計件数) :- _累計件数_2 is _累計件数_1 + _件数, 累計表示(R1,R2,_累計件数_2,_月,_累計件数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/651 # # 2010年度の月毎の件数をまとめたデータですが # 累計を求めたいです。 # # 月 2010年度 # 01 1 # 02 2 # 03 1 # 04 3 # 05 2 # 06 2 # 07 2 # 08 1 # 09 2 # 10 2 # 11 2 # 12 1 # # 求めたい結果 # 月 2010年度累計 # 04 3 # 05 5 # 06 7 # 07 9 # 08 10 # 09 12 # 10 14 # 11 16 # 12 17 # 01 18 # 02 20 # 03 21 # # これだけのデータから # スタートを4月にして累計を求める方法は # ありますでしょうか? # よろしくお願いします。 # '2010年度データ'('01',1). '2010年度データ'('02',2). '2010年度データ'('03',1). '2010年度データ'('04',3). '2010年度データ'('05',2). '2010年度データ'('06',2). '2010年度データ'('07',2). '2010年度データ'('08',1). '2010年度データ'('09',2). '2010年度データ'('10',2). '2010年度データ'('11',2). '2010年度データ'('12',1). 月順序('04','05'). 月順序('05','06'). 月順序('06','07'). 月順序('07','08'). 月順序('08','09'). 月順序('09','10'). 月順序('10','11'). 月順序('11','12'). 月順序('12','01'). 月順序('01','02'). 月順序('02','03'). 月順序('03','04'). '2010年度の月毎の件数をまとめたデータですが累計を求めたいです。'(_月,_累計件数) :- 累計表示('04',0,_月,_累計件数). 累計表示(_月_1,_累計件数_1,_月,_累計件数) :- '2010年度データ'(_月_1,_件数), _累計件数_2 is _累計件数_1 + _件数, 月順序(_月_1,_月_2), 累計表示(_月_1,_月_2,_累計件数_2,_月,_累計件数). 累計表示(_月,_,_累計件数,_月,_累計件数). 累計表示(_,'04',_累計件数,_月,_累計件数) :- !,fail. 累計表示(_月_1,_月_2,_累計件数_2,_月,_累計件数) :- 累計表示(_月_2,_累計件数_2,_月,_累計件数). % 以下のサイトは # # 集約鍵の詳細化 (坂内広蔵氏による集約キーのグラフ化の研究の一部をなぞったもの) # 集約鍵の詳細化(_集約鍵ならび,_詳細化された集約鍵) :- append(_詳細化された集約鍵,_,_集約鍵ならび). % % ?- 集約鍵の詳細化([部,課,係],_詳細化された集約鍵). % % _詳細化された集約鍵 = []; % _詳細化された集約鍵 = [部]; % _詳細化された集約鍵 = [部,課]; % _詳細化された集約鍵 = [部,課,係]; % % false. % % ?- findall(L,集約鍵の詳細化([部,課,係],L),_詳細化された集約鍵ならび). % % _詳細化された集約鍵ならび = [[],[部],[部,課],[部,課,係]] % % ?- % % それでは、 % 集約鍵の詳細化とはどういう意味か。SQLを使って説明する。 ここでは社員数を把握している。 % % 集約鍵 = [] の場合、 % % select count(*) from 社員; % 336 % % % 集約鍵 = [部] の場合、 % % select 部,count(*) from 社員 group by 部; % 営業,200 % 開発,136 % % % 集約鍵 = [部,課] の場合、 % % select 部,課,count(*) from 社員 group by 部,課; % 営業,食品,112 % 営業,薬品,88 % 開発,食品,70 % 開発,薬品,60 % 開発,検査,6 % % % 集約鍵 = [部,課,係] の場合、 % % select 部,課,係,count(*) from 社員 group by 部,課,係; % 営業,食品,東東京,18 % 営業,食品,西東京,20 % 営業,食品,神奈川,20 % 営業,食品,埼玉,16 % 営業,食品,千葉,16 % 営業,食品,群馬,8 % 営業,食品,栃木,7 % 営業,食品,茨城,7 % 営業,薬品,東京,19 % 営業,薬品,神奈川,12 % <以下省略> % % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/635 # # 質問です、お願いします # id|col1|col2 という構成のテーブルがあります # # これに対して、以下のような条件と動作を実現したいと思います # 1)更新できるのはcol2が0の場合のみ # 2)更新できた場合、'updated'を返す # 3)もし、col2が0以外の場合、'update_fail' という値を返す # # どんなクエリ文を書いたら良いんでしょうか # (利用してるDBはmysql5です) # # 'id|col1|col2 という構成のテーブルがあります これに対して、以下のような条件と動作を実現したいと思います 1)更新できるのはcol2が0の場合のみ 2)更新できた場合、\'updated\'を返す 3)もし、col2が0以外の場合、\'update_fail\' という値を返す どんなクエリ文を書いたら良いんでしょうか'(_id,_新しい_col1,_新しい_col2) :- クエリ文(_id,_新しい_col1,_新しい_col2). クエリ文(_id,_新しい_col1,_新しい_col2) :- '更新できるのはcol2が0の場合のみそれ以外は\'update_fail\'を返す'(_id),!. クエリ文(_id,_新しい_col1,_新しい_col2) :- '更新できた場合、\'updated\'を返す'(_id,_新しい_col1,_新しい_col2),!. クエリ文(_id,_新しい_col1,_新しい_col2) :- 'idが存在しない場合、\'update_fail not found id\'を返す'(_id). '更新できるのはcol2が0の場合のみそれ以外は\'update_fail\'を返す'(_id) :- table(_id,_col1,_col2), \+(_col2 = 0), writef('update_fail :: table(%q,%q,%q).\n',[_id,_col1,_col2]),!. '更新できた場合、\'updated\'を返す'(_id,_新しい_col1,_新しい_col2) :- retract(table(_id,_col1,0)), asserta(table(_id,_新しい_col1,_新しい_col2)), writef('updated :: table(%q,%q,%q).\n',[_id,_新しい_col1,_新しい_col2]),!. 'idが存在しない場合、\'update_fail not found id\'を返す'(_id) :- writef('update_fail not found id :: %q\n',[_id]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/628 # # t_guest、t_address、t_friend という3つのテーブルがあって、 # t_guestを基本にして、left joinをt_jushoとt_friendにそれぞれ仕掛けてselectのクエリを作りたいと考えています # # SELECT g.namae, a.prefecture, f.namae # FROM t_guest AS g # LEFT JOIN t_address AS a #  ON g.id = a.guestId # LEFT JOIN t_friend AS f #  ON g.id = f.guestId # WHERE g.age = 20; # # こんなイメージなんですが、ここで、t_addressに住所を登録していないguestのユーザーを検索しないようにするには # どうしたら良いんでしょうか # それぞれのテーブルのカラムへの条件付けはできるんですが、「登録していない状況」をどう表現したら良いのか # わかりません # # 't_guest、t_address、t_friend という3つのテーブルがあって、 t_guestを基本にして、left joinをt_jushoとt_friendにそれぞれ仕掛けてselectのクエリを作りたいと考えています SELECT g.namae, a.prefecture, f.namae FROM t_guest AS g LEFT JOIN t_address AS a  ON g.id = a.guestId LEFT JOIN t_friend AS f  ON g.id = f.guestId WHERE g.age = 20; こんなイメージなんですが、ここで、t_addressに住所を登録していないguestのユーザーを検索しないようにするにはどうしたら良いんでしょうか それぞれのテーブルのカラムへの条件付けはできるんですが、「登録していない状況」をどう表現したら良いのかわかりません'(_namae,_prefecture,_namae) :- t_guest(_id,g_namae), t_address(_id,_address,_prefecture), \+(_address = ''), t_friend(_id,f_namae). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/56 # # t1 # id str # 1 a # 2 b # 3 c # # t2 # id str # 1 d # 2 e # 3 f # # t3 # id t1.id t2.id # 1  1  1 # 2  1  2 # 3  1  3 # 4  2  1 # 5  3  1 # 6  3  3 # # こういうテーブルがあります # left joinで結合したところ # # t1.id t1.str t2.id t2.str t3.id # 1   a   1   d   1 # 1   a   2   e   2 # 1   a   3   f   3 # 2   b   1   d   4 # 3   c   1   d   5 # 3   c   3   f   6 # # こうなりました # これを # # t1.idが2でt2.idが2か3はnullなので入っていません # 同様にt1.idが3でt2.idが2のとこもnullなので入っていません # これを入れて # # t1.id t1.str t2.id t2.str t3.id # 1   a   1   d   1 # 1   a   2   e   2 # 1   a   3   f   3 # 2   b   1   d   4 # 2   b   2   e  null # 2   b   3   f  null # 3   c   1   d   5 # 3   c   2   e  null # 3   c   3   f   6 # # こんな感じのを取得したいのですがどのようなSQLをかけばいいでしょうか? # 使用DB SQLite3 # # 't1,t2,t3を結合するがt3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t1_str,_t2_id,_t2_str,_t3_id) :- t1(_t1_id,_t1_str), t2(_t2_id,_t2_str), 't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id). 't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id) :- t3(_t3_id,_t1_id,_t2_id). 't3が結合対象がない時は_t3_idは[]とする'(_t1_id,_t2_id,_t3_id) :- \+(t3(_t3_id,_t1_id,_t2_id)), _t3_id = []. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/602 # # SQL SERVER 2012です。 # # データベース # 番号 列1 列2 # No1 5 3 # No2 4 3 # # # 各番号の列1と列2の差を求め # # 番号 差異 # No1 2 # No2 1 # # 得られた差異の平均を求めたい # 式:(2+1)/2=1.5 # # 求めたい結果 # 結果 # 1.5 # この1.5の値を求めたいです。 # # よろしくお願いします。 # # 'データベース 番号 列1 列2 No1 5 3 No2 4 3 各番号の列1と列2の差を求め 番号 差異 No1 2 No2 1 得られた差異の平均を求めたい 式:(2+1)/2=1.5 求めたい結果 結果 1.5 この1.5の値を求めたいです。'(_差異の平均) :- findavg(_差,( データベース(_No,_列1,_列2), _差 is _列1 - _列2), _差異の平均). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/598 # # mysql 5.5 # # テーブル master # tcode # tname # lastdate # 〜 # # daily_data # select tcode,max(tdate) as maxdate # from daily_date # group by tcode; # # このdaily_dateから得られるmaxdateを使って # masterのtcodeの対応するlastdateに入れたいのですが、 # どのようにupdateを書けば良いのでしょうか? # 'daily_dateから得られるmaxdateを使ってmasterのtcodeの対応するlastdateに入れたい' :- dail_dateテーブルの構造(P1,_daily_date_tcode,_date), masterテーブルの構造(P2,_master_tcode,_lastdate), findsetof(_tcode,P1,L1), 最大日付に変更する(L1,P1,P2,_daily_date_tcode,_date,_master_tcode,_lastdate),!. daily_dateテーブルの構造(P,_tcode,_date) :- count(テーブル定義(daily_date,_,_),_アリティ), length(L,_アリティ), P =.. [daily_date|L], tcodeとdateの列位置を確定する(L,_tcode,_date),!. tcodeとdateの列位置を確定する(L,_tcode,_date),!. テーブル定義(daily_date,_nth1_tcode,tcode), テーブル定義(daily_date,_nth1_date,date), nth1(_nth1_tcode,L,_tcode), nth1(_nth1_date,L,_date),!. masterテーブルの構造(P,_tcode,_date) :- count(テーブル定義(master,_,_),_アリティ), length(L,_アリティ), P =.. [master|L], tcodeとlastdateの列位置を確定する(L,_tcode,_lastdate),!. tcodeとlastdateの列位置を確定する(L,_tcode,_date),!. テーブル定義(master,_nth1_tcode,tcode), テーブル定義(master,_nth1_lastdate,lastdate), nth1(_nth1_tcode,L,_tcode), nth1(_nth1_date,L,_lastdate),!. 最大日付に変更する(L1,P1,P2,_daily_date_tcode,_date,_master_tcode,_lastdate) :- forall(( member(_tcode,L1), findmax(_date,P1,_maxdate), lastdateの更新(_maxdate,P2,_tcode,_lastdate)), true). lastdateの更新(_maxdate,P,_tcode,_lastdate) :- retract(P), _lastdate = _maxdate, asserta(P),!. lastdateの更新(_maxdate,P,_tcode,_lastdate) :- _lastdate = _maxdate, asserta(P),!. % 以下のサイトは # 出典 :: SQL質疑応答スレ 13問目 #562 # t_all #  id/groupType/userId # t_groupA #  id/c1/c2/c3 # t_groupB #  id/c1/c2/c3 # # 以上のような3つのテーブルがあって、t_all.groupTypeの値はgroupAまたはgroupBのいずれか # かつ、t_all.userId は t_groupA.id または t_groupB.id のいずれかである構造になっています # # この状況で、t_all.idしかわかっていない時に最短で # t_all.groupType、t_all.userId と、それに付随するt_groupAの全カラムまたはt_groupBの全カラムを # 取得するにはどういうクエリ文を書いたら良いでしょうか? # # select t_all.groupType, t_all.userId from t_all where t_all.id = $id; # として、その返り値のgroupTypeとuserIdを元にif文で分けてもう一度グループのテーブルにselectをするしかないですか? # よろしくお願いします。環境はmysql5.5です # # 't_all  id/groupType/userId t_groupA  id/c1/c2/c3 t_groupB  id/c1/c2/c3 以上のような3つのテーブルがあって、t_all.groupTypeの値はgroupAまたはgroupBのいずれか かつ、t_all.userId は t_groupA.id または t_groupB.id のいずれかである構造になっています この状況で、t_all.idしかわかっていない時に最短で t_all.groupType、t_all.userId と、それに付随するt_groupAの全カラムまたはt_groupBの全カラムを 取得するにはどういうクエリ文を書いたら良いでしょうか?'(_id,_goupType,_userId,_c1,_c2,_c3) :- t_all(_id,_groupType,_userId), atomic_list_concat(['t_group',_groupType],_t_groupType), list_call([_t_groupType,_userId,_c1,_c2,_c3]). list_call(L) :- P =.. L, call(P). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/537 # # SQLite 3.7.7.1 を PDO で操作しています。 # 以下ようなテーブルがあった場合にそれぞれのarticle_idのcomment_idをカウントするのはどのようなSQLを書いたら良いのでしょうか。 # # article_idを指定して一件だけ取り出す場合は、SELECT文にCOUNT(comments.comment_id) as comment_countのようにしてWHERE句でarticle_idを指定すれば取得できたのですが、全件の取得する場合が思うような結果が得られず困っております。。 # # ■ このような結果が欲しいです # article_id   comment_count # --------------------------- # 1       1 # 2       0 # 3       2 # 4       0 # 5       2 # # ■ articles # article_id   content # --------------------------- # 1       hoge # 2       hoge # 3       hoge # 4       hoge # 5       hoge # # ■ comments # comment_id   article_id # --------------------------- # 1       5 # 2       3 # 3       3 # 4       1 # 5       5 # # '以下のようなテーブルがあった場合にそれぞれのarticle_idのcomment_idをカウントする ■ このような結果が欲しいです article_id   comment_count --------------------------- 1       1 2       0 3       2 4       0 5       2 ■ articles article_id   content --------------------------- 1       hoge 2       hoge 3       hoge 4       hoge 5       hoge ■ comments comment_id   article_id --------------------------- 1       5 2       3 3       3 4       1 5       5 '(_article_id,_カウント) :- articles(_article_id,_), count(comments(_,_article_id),_カウント). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/490 # # SQL SERVER2012です。 # # 列1をaとbで検索して # 新しく列2,列3を作成。 # 列2にaの値を # 列3にbの値を表示することが # 可能ならばやり方を教えてもらえませんでしょうか。 # # 列1 # a # b # a # b # c # # 求めたい結果 # 列2 列3 # a b # a b # # 宜しくお願いします。 # # '列1をaとbで検索して 新しく列2,列3を作成。 列2にaの値を 列3にbの値を表示する'(_列2,_列3) :- findall(a,table(a),L1), findall(b,table(b),L2), nth1(_nth1,L1,_列2), nth1(_nth1,L2,_列3). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/478 # # MySQL5.1 # ・テーブルデータ # table1 # name value # -------------------- # aaa a # aaa b # aaa c # bbb b # bbb c # ccc a # ccc c # # ・欲しい結果 # bbb # # table1から、valueにaが無いnameを抽出したいです。 # お願いします。 # # 'MySQL5.1 ・テーブルデータ table1 name value -------------------- aaa a aaa b aaa c bbb b bbb c ccc a ccc c ・欲しい結果 bbb table1から、valueにaが無いnameを抽出したいです。'(_name) :- table1(_name,_value), \+(_value=a). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/431 # # UPDATE list SET target=1 WHERE id=1 # というので更新をかけたいのですが、id=1が複数あります。 # どれでもいいのでid=1のものを1つ更新をかけたいのですがそういったことは可能でしょうか? # 最後に「LIMIT 1」とつけたら # SQLSTATE[HY000]: General error: 1 near "LIMIT": syntax errorとエラーが表示されましたので間違っているとは思うのですが # こういったことが可能であれば構文的にご指摘いただけないでしょうか。 # # 'UPDATE list SET target=1 WHERE id=1 というので更新をかけたいのですが、id=1が複数あります。 どれでもいいのでid=1のものを1つ更新をかけたい' :- テーブルの更新(list,[id],[1],true,[target],[1]). テーブルの更新(_テーブル名,_鍵属性ならび,_鍵値ならび,_条件,_置換属性ならび,_置換値ならび) :- テーブル定義から実行項と引数ならびを得る(_テーブル名,P,_引数ならび), 鍵を設定する(_テーブル名,_鍵属性ならび,_鍵値ならび,_引数ならび), 条件に適合した節を削除する(P,_条件), 引数ならびの値を置換する(_テーブル名,_置換属性ならび,_置換値ならび,_引数ならび,_置換された引数ならび), 置換された節を先頭に加える(_テーブル名,_置換された引数ならび). 条件に適合した節を削除する(P,_条件) :- retract(P), '診断: 条件に適合した節を削除する'(P,_条件). '診断: 条件に適合した節を削除する'(P,_条件) :- call(_条件),!. '診断: 条件に適合した節を削除する'(P,_条件) :- asserta(P). テーブル定義から実行項と引数ならびを得る(_テーブル名,P,_引数ならび) :- findall(_,テーブル定義(_テーブル名,_,_),_引数ならび), P =.. [_テーブル名|_引数ならび],!. 鍵を設定する(_,[],[],_引数ならび). 鍵を設定する(_テーブル名,[_鍵属性|R1],[_鍵値|R2],_引数ならび) :- テーブル定義(_テーブル名,_nth1,_鍵属性), nth1(_nth1,_引数ならび,_鍵値), 鍵を設定する(_テーブル名,R1,R2,_引数ならび). 引数ならびの値を置換する(_,[],[],_置換された引数ならび,_置換された引数ならび). 引数ならびの値を置換する(_テーブル名,[_置換属性|R1],[_置換値|R2],_引数ならび,_置換された引数ならび) :- テーブル定義(_テーブル名,_nth1,_置換属性), 要素番号によるならびの置換(_nth1,_置換値,_引数ならび,_引数ならび_2), 引数ならびの値を置換する(_テーブル名,R1,R2,_引数ならび_2,_置換された引数ならび). 要素番号によるならびの置換(_要素番号,_置換要素,_対象ならび,_置換ならび) :- length([_|L0],_要素番号), append(L0,[_|R],_対象ならび), append(L0,[_置換要素|R],_置換ならび),!. 置換された節を先頭に加える(_テーブル名,_置換された引数ならび) :- P =.. [_テーブル名|_置換された引数ならび], asserta(P). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/402 # # A列 B列 # 001 002 # 004 009 # 007 005 # # こういうテーブルのA列 B列から、 # # 001 # 002 # 004 # 009 # 007 # 005 # # と交互に抜き出す方法はありませんか? # 'A列 B列 001 002 004 009 007 005 こういうテーブルのA列 B列から、 001 002 004 009 007 005 と交互に抜き出す方法はありませんか?'(X) :- テーブル(_A列,_B列), 交互に抜き出す(_A列,_B列,X). 交互に抜き出す(_A列,_,_A列). 交互に抜き出す(_,_B列,_B列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/313 # # SET型について質問です。 # # 'りんご', 'みかん', 'ばなな', 'めろん' # # のようなfruitという名のフィールドがあった時、 # 'りんご' と 'ばなな' 両方が含まれているデータを取得したいのですが、どのようにしたら良いでしょうか? # # WHERE `fruit` & 5 # # このようにしたら、 'りんご' または 'ばなな' のいずれかを持つデータが取得されてしまいます。 # # # MySQL5を使用しています。 # どなたかご教授お願いしますm(_ _)m # # 'りんご, みかん, ばなな, めろん のようなfruitという名のフィールドがあった時、 りんご と ばなな 両方が含まれているデータを取得したいのですが、どのようにしたら良いでしょうか?'(_fruit) :- テーブル検索の副目標を得る(テーブル1,[fruit],_テーブル定義,_副目標,_値ならび,[_fruit]), _副目標, 'fruitという名のフィールドがあった時、りんご と ばなな 両方が含まれているデータを取得したい'(_fruit). テーブル検索の副目標を得る(_テーブル名,_鍵名ならび,_テーブル定義,_副目標,_値ならび,_鍵の変数ならび) :- テーブル定義の取得(_テーブル名,_テーブル定義,_副目標,_値ならび). 副目標に鍵を設定する(_テーブル定義,_鍵名ならび,_値ならび,_鍵の変数ならび),!. テーブル定義の取得(_テーブル名,_テーブル定義,_副目標,_値ならび) :- findall([_位置,_属性名],( テーブル定義(_テーブル名,_位置,_属性名)), _テーブル定義), length(_テーブル定義,Len), length(_値ならび,Len), _副目標 =.. [_テーブル名|_値ならび]. 副目標に鍵を設定する(_,[],_,[]). 副目標に鍵を設定する(_テーブル定義,[_鍵名|R2],_値ならび,[_鍵の変数|R4]) :- member([_鍵の位置,_鍵名],_テーブル定義), nth1(_鍵の位置,_値ならび,_鍵の変数), 副目標に鍵を設定する(_テーブル定義,R2,_値ならび,R4). 'fruitという名のフィールドがあった時、りんご と ばなな 両方が含まれているデータを取得したい'(_fruit) :- sub_atom(_fruit,_,_,_,りんご), sub_atom(_fruit,_,_,_,ばなな). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/318 # # MySQL5.1 # # table1 # id,hoge1,hoge2 # # idが2,4,6の中で、hoge1が1,3,5のidを取得したい。 # # SELECT `id` FROM `table1` WHERE (`id` IN (2,4,6)) AND (`hoge1` IN (1,3,5)); # # このsqlでidが2,4,6の3件からの検索なりますか? # もっといいsqlありますか? # # 'table1 id,hoge1,hoge2 idが2,4,6の中で、hoge1が1,3,5のidを取得したい。'(_id) :- テーブル検索の副目標を得る(table1,[id,hoge1],_,_副目標,_,[_id,_hoge1]), member(_id,[2,4,6]), member(_hoge1,[1,3,5]), _副目標. テーブル検索の副目標を得る(_テーブル名,_鍵名ならび,_テーブル定義,_副目標,_値ならび,_鍵の変数ならび) :- テーブル定義の取得(_テーブル名,_テーブル定義,_副目標,_値ならび). 副目標に鍵を設定する(_テーブル定義,_鍵名ならび,_値ならび,_鍵の変数ならび),!. テーブル定義の取得(_テーブル名,_テーブル定義,_副目標,_値ならび) :- findall([_位置,_属性名],( テーブル定義(_テーブル名,_位置,_属性名)), _テーブル定義), length(_テーブル定義,Len), length(_値ならび,Len), _副目標 =.. [_テーブル名|_値ならび]. 副目標に鍵を設定する(_,[],_,[]). 副目標に鍵を設定する(_テーブル定義,[_鍵名|R2],_値ならび,[_鍵の変数|R4]) :- member([_鍵の位置,_鍵名],_テーブル定義), nth1(_鍵の位置,_値ならび,_鍵の変数), 副目標に鍵を設定する(_テーブル定義,R2,_値ならび,R4). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/300 # # MS SQL server2012です。 # # 下記のデータベースから # 親の値=Aで検索して # 子の値を取得し、さらに # 子の値=親の値で検索したいのですが # 求めたい結果を一気に表示する方法が # あったら教えてください。 # # 親子 # AB # BC # CD # XY # Z0 # # 求めいた結果 # 親子 # AB # BC # CD # よろしくお願いします。 # # 親子('A','B'). 親子('B','C'). 親子('C','D'). 親子('X','Y'). 親子('Z','0'). 'データベースから親の値=Aで検索して子の値を取得し、さらに子の値=親の値で検索したいのですが結果を一気に表示する方法があったら教えてください。' :- 'データベースから親の値=Aで検索して子の値を取得し、さらに子の値=親の値で検索した'('A',X,Y), writef('%t,%t\n',[X,Y]), fail. 'データベースから親の値=Aで検索して子の値を取得し、さらに子の値=親の値で検索したいのですが結果を一気に表示する方法があったら教えてください。'. 'データベースから親の値で検索して子の値を取得し、さらに子の値=親の値で検索した'(_親の値,_子の値) :- 親の値で検索して子の値を取得し(_親の値_1,_親の値,_子の値). 親の値で検索して子の値を取得し(A,X,Y) :- 親子(A,B), さらに子の値=親の値で検索した(A,B,X,Y). 'さらに子の値=親の値で検索した'(X,Y,X,Y). 'さらに子の値=親の値で検索した'(_,B,X,Y) :- 親の値で検索して子の値を取得し(B,X,Y). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/295 # # 複数のデータベースからデータを取り出したいのですが # 似たようなデータが並んでいて、SELECTと同じようにコンマ区切りでやれば・・・と思い、 # SELECT * FROM A,Bと # してみたのですが、取り出せず、 # SELECT * FROM A B # としたのですが、Aのデータしか取り出せません。 # どのようにすれば両方のデータを取り出せるのでしょうか。 # 共通のキーでくっつけるではなく、 # # A あほ # A ばか # A あほ # A あほ # B あほ # B ばか # B ばか # B あほ # # のように取り出したいのです。 # # '複数のデータベースからデータを取り出したいのですが 似たようなデータが並んでいて、SELECTと同じようにコンマ区切りでやれば・・・と思い、 SELECT * FROM A,Bと してみたのですが、取り出せず、 SELECT * FROM A B としたのですが、Aのデータしか取り出せません。 どのようにすれば両方のデータを取り出せるのでしょうか。 共通のキーでくっつけるではなく、 A あほ A ばか A あほ A あほ B あほ B ばか B ばか B あほ のように取り出したいのです。'(_値ならび) :- テーブルの引数ならびを得る(テーブルA,_,_Aの引数ならび), テーブルの引数ならびを得る(テーブルB,_,_Bの引数ならび), テーブルAを取り出す(_Aの引数ならび,_Aを取り出す条件,_値ならび), テーブルBを取り出す(_Bの引数ならび,_Bを取り出す条件,_値ならび). テーブルAを取り出す(_引数ならび,_取り出す条件,_値ならび) :- P =.. [テーブルA|_引数ならび], call(P), call(_取り出す条件). テーブルBを取り出す(_引数ならび,_取り出す条件,_値ならび) :- P =.. [テーブルB|_引数ならび], call(P), call(_取り出す条件). テーブルの引数ならびを得る(_テーブル名,_属性名ならび,_引数ならび) :- setof([_属性位置,_属性名,_],[_テーブル名,_属性位置,_属性名] ^ ( テーブル構造(_テーブル名,_属性位置,_属性名)),LL), 第二要素のみ取り出す(LL,_属性名ならび), 第三要素のみ取り出す(LL,_引数ならび). 第二要素のみ取り出す([],[]). 第二要素のみ取り出す([[_,A|_]|R1],[A|R2]) :- 第二要素のみ取り出す(R1,R2). 第三要素のみ取り出す([],[]). 第三要素のみ取り出す([[_,_,A|_]|R1],[A|R2]) :- 第三要素のみ取り出す(R1,R2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/292 # # ご教授ください # # ■ACCESS 2010 # # ・テーブルA #  カラム:key1,key2,key3,key4,data1 # ・テーブルB #  カラム:key1,key2,key3,key4,data2 # ・テーブルC #  カラム:key1,key2,key3,key4,data3 # ・テーブルD #  カラム:key1,key2,key3,key4,data4,data5 # # テーブルA〜Dをkey1〜key4で結合し、以下のテーブルを作成したいです。 # # ・テーブルZ #  カラム:key1,key2,key3,key4,data1,data2,data3,data4,data5 # # よろしくお願いします。 # # :- dynamic(テーブルZ/9). '・テーブルA  カラム:key1,key2,key3,key4,data1 ・テーブルB  カラム:key1,key2,key3,key4,data2 ・テーブルC  カラム:key1,key2,key3,key4,data3 ・テーブルD  カラム:key1,key2,key3,key4,data4,data5 テーブルA〜Dをkey1〜key4で結合し、以下のテーブルを作成したいです。 ・テーブルZ  カラム:key1,key2,key3,key4,data1,data2,data3,data4,data5 ' :- 'テーブルA〜Dをkey1〜key4で結合し'(_key1,_key2,_key3,_key4,_data1,_data2,_data3,_data4,_data5), assertz(テーブルZ(_key1,_key2,_key3,_key4,_data1,_data2,_data3,_data4,_data5)), fail; true. 'テーブルA〜Dをkey1〜key4で結合し'(_key1,_key2,_key3,_key4,_data1,_data2,_data3,_data4,_data5) :- テーブルA(_key1,_key2,_key3,_key4,_data1), テーブルB(_key1,_key2,_key3,_key4,_data2), テーブルC(_key1,_key2,_key3,_key4,_data3), テーブルD(_key1,_key2,_key3,_key4,_data4,_data5). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/281 # # SQL Server 2000においてです。 # # テーブルのフィールドに電話番号、携帯番号、FAX とあった場合、これらから例えば"0123"と検索するのに # Or で接続する以外に検索する方法はありますか? # # 普通?に考えれば以下の方になるかと思いますが、これを簡易的?にインデックスが利く状態で書き換えたい。 # > SELECT * # > FROM Tablehoge # > WHERE (電話番号="0123") OR (携帯番号="0123") OR (FAX="0123") # # なので以下の様なものは却下になります。 # > SELECT * # > FROM Tablehoge # > WHERE "|" & 電話番号 & "|" & 携帯番号 & "|" & FAX & "|" Like "*|0123|*" # # 'テーブルのフィールドに電話番号、携帯番号、FAX とあった場合、これらから例えば"0123"と検索するのにOr による遅い検索'(_電話番号,_携帯番号,_FAX) :- setof([_電話番号,_携帯番号,_FAX],[_電話番号,_携帯番号,_FAX] ^ ( 'Or による遅い検索'(_電話番号,_携帯番号,_FAX)),LL), member([_電話番号,_携帯番号,_FAX],LL). 'Or による遅い検索'(_電話番号,_携帯番号,_FAX) :- テーブル(_電話番号,_携帯番号,_FAX), sub_atom(_電話番号,_,4,_,'0123'). 'Or による遅い検索'(_電話番号,_携帯番号,_FAX) :- テーブル(_電話番号,_携帯番号,_FAX), sub_atom(_携帯番号,_,4,_,'0123'). 'Or による遅い検索'(_電話番号,_携帯番号,_FAX) :- テーブル(_電話番号,_携帯番号,_FAX), sub_atom(_Fax,_,4,_,'0123'). 'テーブルのフィールドに電話番号、携帯番号、FAX とあった場合、これらから例えば"0123"と検索するのにOr で検索する'(_電話番号,_携帯番号,_FAX) :- テーブル(_電話番号,_携帯番号,_FAX), 'Orで検索する'(_電話番号,_携帯番号,_FAX). 'Orで検索する'(_電話番号,_携帯番号,_FAX) :- sub_atom(_電話番号,_,4,_'0123'),!. 'Orで検索する'(_電話番号,_携帯番号,_FAX) :- sub_atom(_携帯番号,_,4,_'0123'),!. 'Orで検索する'(_電話番号,_携帯番号,_FAX) :- sub_atom(_Fax,_,4,_'0123'). 'テーブルのフィールドに電話番号、携帯番号、FAX とあった場合、これらから例えば"0123"と検索するのにOr 以外で検索する'(_電話番号,_携帯番号,_FAX) :- テーブル(_電話番号,_携帯番号,_FAX), 'Or以外で検索する'(_電話番号,_携帯番号,_FAX). 'Or以外で検索する'(_電話番号,_携帯番号,_FAX) :- atomic_list_concat([_電話番号,_携帯番号,_FAX],S), sub_atom(S,_,4,_,'0123'),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/271 # # Oracle11gR2で # # ID  Count # 1 3 # 2 2 # 3 3 # # こういうデータを元に # # Seq ID # 1 1 # 2 1 # 3 1 # 4 2 # 5 2 # 6 3 # 7 3 # 8 3 # # こんな感じのCount(*)の逆を作りたいけど、PL/SQL使わずに作るには、どうしたらいい? # Seqはなくてもいい # 'ID  Count 1 3 2 2 3 3 こういうデータを元に Seq ID 1 1 2 1 3 1 4 2 5 2 6 3 7 3 8 3 こんな感じのCount(*)の逆を作りたいけど、PL/SQL使わずに作るには、どうしたらいい?'(_テーブル名,_Seq,_ID) :- 実行項の生成(_テーブル名,_ID,_実行項), 'IDごとのカウントを取る'(_ID,_実行項,_ID_頻度ならび), sort(_ID_頻度ならび,_整列した_ID_頻度ならび), 'Seq組を生成'(1,_整列した_ID_頻度ならび,_Seq,_ID). 実行項の生成(_テーブル名,_ID,_実行項) :- findmax(Nth1,テーブル定義(_テーブル名,Nth1,_),_組の要素数), length(L,_組の要素数), _実行項 =.. [_テーブル名|L], テーブル定義(_テーブル名,_IDの位置,'ID'), nth1(_IDの位置,L,_ID). 'IDごとのカウントを取る'(_ID,_実行項,_ID_頻度ならび) :- setof(_ID,[_ID,_実行項] ^_実行項,_IDならび), findall([_ID,_頻度],( member(_ID,_IDならび), count(_実行項,_頻度ならび)),_ID_頻度ならび). 'Seq組を生成'(N_1,[[_ID,_頻度]|R],_Seq,_ID) :- N_2 is N_1 + _頻度 - 1, between(N_1,N_2,_Seq). 'Seq組を生成'(N_1,[[_ID,_頻度]|R],_Seq,_ID) :- N_2 is N_1 + _頻度, 'Seq組を生成'(N_2,R,_Seq,_ID). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/224 # # jinko menseki mitsudo # 200 1000 null # 100 1000 null # ・ # ・ # # というテーブルで # mitsudoに jinko/menseki の計算結果を挿入するにはどうすればいいんでしょうか。 # # jinko menseki mitsudo # 200 1000 0.2 # 100 1000 0.1 # ・ # ・ # # としたいです # # :- dynamic(人口密度/3). 'jinko menseki mitsudo 200 1000 null 100 1000 null ・ ・ というテーブルで mitsudoに jinko/menseki の計算結果を挿入するにはどうすればいいんでしょうか。 jinko menseki mitsudo 200 1000 0.2 100 1000 0.1 ・ ・ としたいです' :- 'mitsudoに jinko/menseki の計算結果を挿入する'. 'mitsudoに jinko/menseki の計算結果を挿入する' :- retract(人口密度(_jinko,_menseki,_mitsudo)), _mitsudo is _inko / _menseki, assertz(人口密度(_jinko,_menseki,_mitsudo)), fail. 'mitsudoに jinko/menseki の計算結果を挿入する'. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/228 # # ご教示お願いいたします。 # # ・DBMS名とバージョン # SQL Server2008 # # ・テーブルデータ # テーブル名:住所_MST # ID 住所 # ------------ # 001 住所A # 002 住所B # 003 住所C # 004 住所D # 005 住所E # 006 住所F # 008 住所G # 010 住所H # # ・欲しい結果 # IDに007を設定してINSERTしたいのですが上手くSQL文が浮かびませんでした # 仕様としましては一番若いIDから、設定されていないIDを取得してINSERTします # なお、IDはキー設定されています # # 結果は下記のようになります # ID 住所 # ------------ # 001 住所A # 002 住所B # 003 住所C # 004 住所D # 005 住所E # 006 住所F # 007 新住所 # 008 住所G # 010 住所H # # '・DBMS名とバージョン SQL Server2008 ・テーブルデータ テーブル名:住所_MST ID 住所 ------------ 001 住所A 002 住所B 003 住所C 004 住所D 005 住所E 006 住所F 008 住所G 010 住所H ・欲しい結果 IDに007を設定してINSERTしたいのですが上手くSQL文が浮かびませんでした 仕様としましては一番若いIDから、設定されていないIDを取得してINSERTします なお、IDはキー設定されています 結果は下記のようになります ID 住所 ------------ 001 住所A 002 住所B 003 住所C 004 住所D 005 住所E 006 住所F 007 新住所 008 住所G 010 住所H '(_住所) :- '一番若いIDから、設定されていないIDを取得してINSERTします'(_住所). '一番若いIDから、設定されていないIDを取得してINSERTします'(_住所) :- between(1,999,N), 頭部零文字列(3,N,_ID), \+(住所_MST(_ID,_)), assertz(住所_MST(_ID,_住所)),!. 頭部零文字列(_長さ,_整数,_頭部零文字列) :- length(_頭部零文字ならび,_長さ), number_chars(_整数,Chars), append(L0,Chars,_頭部零文字ならび), all(L0,'0'), atom_chars(_頭部零文字列,_頭部零文字ならび),!. all([],_). all([A|R],A) :- all(R,A). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/212 # # 質問です。 # 開始地点を表すカラム start_point と終了地点を表すカラム end_point があり、その距離は # ST_Distance(ST_GeographyFromText(ST_AsText(start_point)), ST_GeographyFromText(ST_AsText(end_point))) # で計算できます。 # それで、 # ・select で距離を計算するときは round() するけど # ・order by でソートする時は round() なしで(つまりfloatのまま)ソートする # ということをしたいです。 # SQLはこんな感じになるんですけど、 # select round(ST_Distance(ST_GeographyFromText(ST_AsText(start_point)), ST_GeographyFromText(ST_AsText(end_point)))) as distance # from geo_data # order by ST_Distance(ST_GeographyFromText(ST_AsText(start_point)), ST_GeographyFromText(ST_AsText(end_point))) # これだと距離の計算が二重に行われてしまい、無駄です。 # これを、距離の計算を二重に行わずに意図した通りのSQLを発行することはできますか。 # よろしくお願いします。 # 環境:PostgreSQL 9.1 # テーブル定義(geo,1,id). テーブル定義(geo,2,start_point). テーブル定義(geo,3,end_point). '開始地点を表すカラム start_point と終了地点を表すカラム end_point があり、その距離を小さい順に取り出す(距離を四捨五入)'(_start_point,_end_point,_distance) :- テーブル述語を得る(geo,[start_point,end_point],[_start_point,_end_point],P), 四捨五入しない距離で整列(P,_start_point,_end_point,L2), member([_distance_1,_start_point,_end_point],L2), 四捨五入(_distance_1,_distance). テーブル述語を得る(_テーブル名,_カラムならび,_カラム変数ならび,_テーブル述語) :- findall(_,( テーブル定義(テーブル名,_,_)), L, カラム変数ならびを得る(_テーブル名,_カラムならび,_カラム変数ならび,L), _テーブル述語 =.. [_テーブル名|L]. カラム変数ならびを得る(_テーブル名,_カラムならび,[],L) :- !. カラム変数ならびを得る(_テーブル名,[_カラム|R1],[_カラム変数|R2],L) :- テーブル定義(_テーブル名,Nth,_カラム), nth1(Nth,L,_カラム変数), カラム変数ならびを得る(_テーブル名,R1,R2,L). 四捨五入しない距離で整列(P,_start_point,_end_point,L2) :- findall([_distance,_start_point,_end_point],( _テーブル述語, _distance is _end_point - _start_point), L1), 整列(L1,L2). 四捨五入(A,B) :- B is round(A). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/209 # # MySQLの初歩的な質問です # # テーブル名y2010 主キー 場所 # # 場所 人口 # ---------------- # 東京 1500 # 大阪 800 # 福岡  500 #  ・・・ # # テーブル名 y2011 主キー 場所 # # 場所 人口 # ---------------- # 東京 1600 # 大阪 900 # 福岡  600 # # のようなテーブルがあるときに、 # # テーブル名 y_sum 主キー 場所 # # 場所 人口 # ---------------- # 東京 3100 # 大阪 1700 # 福岡 1100 # # のように、複数のテーブルから主キーを含むフィールドを参照して # 参照した或るフィールドの値の和を代入したフィールドをもつテーブルを新たに作成するには # どのようなクエリにすればよいのでしょうか? # # おねがいしますm(._.)m おねがい # :- dynamic(y_sum/2). '複数のテーブルから主キーを含むフィールドを参照して参照した或るフィールドの値の和を代入したフィールドをもつテーブルを新たに作成する' :- setof(_場所,[_場所] ^ 場所(_場所),_場所ならび), append(_,[_場所|R],_場所ならび), 人口の合計(_場所,_人口の合計), assertz(y_sum(_場所,_人口の合計)), R = []. 場所(_場所) :- y2010(_場所,_). 場所(_場所) :- y2011(_場所,_). 人口(_場所,_人口) :- y2010(_場所,_人口). 人口(_場所,_人口) :- y2011(_場所,_人口). 人口の合計(_場所,_人口の合計) :- findsum(_人口,人口(_場所,_人口),_人口の合計). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/207 # # DBMS名「MySQL 5.0.95」 # # TABLE `items` # `itemID`,itemNAME` # '1','AAA' # '2','BBB' # '3','CCC' # '4','DDD' # '5','EEE' # '6','FFF' # # TABLE `purchase` # `userID`,`itemID` # '1001','1' # '1001','2' # '1002','1' # '1002','2' # '1002','5' # '1003','1' # '1004','5' # '1004','6' # # TABLE `recommend` # `itemID`,`rank` # '2','10' # '4','9' # '5','8' # '1','7' # # 上記のように、商品マスター `items` 購入履歴 `purchase` オススメリスト `recommend` # の3つのテーブルがあります。 # # ここで、特定の`userID`にオススメリストを表示したいのですが、 # その際には、購入済みの商品は省いて表示したいと思います。 # # 上記の例で`userID`='1001'には # itemID = '4' と itemID = '5' # だけを表示させていたと思います。 # # `item`テーブルの情報も含め # items.`itemID`,items.itemNAME`,recommend.`rank` # '4','DDD','9' # '5','EEE','8' # という結果を求めるためのSQLはどう書けばよいでしょうか? # # '上記のように、商品マスター `items` 購入履歴 `purchase` オススメリスト `recommend` の3つのテーブルがあります。 ここで、特定の`userID`にオススメリストを表示したいのですが、 その際には、購入済みの商品は省いて表示したいと思います。'(_顧客ID,_商品ID,_商品名,_ランク) :- オススメリスト(_商品ID,_ランク), \+(購入履歴(_顧客ID,_商品ID)), 商品マスター(_商品ID,_商品名). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/205 # # MS SQL server 2012です。 # TableA # 商品名 製造数 # A 1000 # B 2000 # C 1000 # # TableB # 商品名 単価 # A 100 # A 120 # B 90 # C 120 # C 125 # # TableBには同一商品名で複数の単価が登録されています。 # TableBの商品名毎の一番高い単価を基にして # TableAの製造数 x 単価を求めたいのですが # 一発で出す方法有りましたら教えてください。 # # 得たい結果 # A 12000 # B 18000 # C 12500 # # 'TableBには同一商品名で複数の単価が登録されています。 TableBの商品名毎の一番高い単価を基にしてTableAの製造数 x 単価を求める'(_商品名,_金額) :- setof(_商品名,[_商品名,_単価] ^ ( テーブルB(_商品名,_単価)),_商品名ならび), 'TableBの商品名毎の一番高い単価を基にしてTableAの製造数 x 単価を求める'(_商品名ならび,_商品名,_金額). 'TableBの商品名毎の一番高い単価を基にしてTableAの製造数 x 単価を求める'([_商品名|R1],_商品名,_金額) :- findmax(_単価,( テーブルB(_商品名,_単価)), _一番高い単価), テーブルA(_商品名,_製造数), _金額 is _一番高い単価 * _製造数. 'TableBの商品名毎の一番高い単価を基にしてTableAの製造数 x 単価を求める'([_|R1],_商品名,_金額) :- 'TableBの商品名毎の一番高い単価を基にしてTableAの製造数 x 単価を求める'(R1,_商品名,_金額). % 以下のサイトは # 出典 :: SQL質疑応答スレ 13問目 # SQLに関して質問です。MySQL5.1.41です。 # # 【チームテーブル(team)】 # -------------------- # チームID  チーム名 # -------------------- # 1      巨人 # 2      阪神 # 3      中日 # # 【選手テーブル(player)】 # -------------------------------------- # 選手ID  チームID  選手名  背番号 # -------------------------------------- # 1     1      阿部   10 # 2     1      杉内   18 # 3     2      金本   6 # 4     2      鳥谷   1 # 5     3      岩瀬   13 # 6     3      谷繁   27 # # この条件で、各チームから背番号最少の選手を抽出するのが目的です。 # 結果イメージは、 # # ---------------------------- # チーム名  選手名  背番号 # ---------------------------- # 巨人    阿部    10 # 阪神    鳥谷    1 # 中日    岩瀬    13 # # です。SQLで # SELECT チーム名, 選手名, 背番号 FROM team LEFT JOIN player USING (チームID) WHERE MIN(背番号); # ではエラーになってしまいました。 # # ご教示宜しくお願いいたします。 # # チーム(1,巨人). チーム(2,阪神). チーム(3,中日). 選手(1,1,阿部,10). 選手(2,1,杉内,18). 選手(3,2,金本,6). 選手(4,2,鳥谷,1). 選手(5,3,岩瀬,13). 選手(6,3,谷繁,27). 各チームから背番号最少の選手を抽出する(_チーム,_選手名,_チーム最小背番号) :- チーム(_チームID,_チーム), 背番号最少の選手を抽出する(_チームID,_選手名,_チーム最小背番号). 背番号最少の選手を抽出する(_チームID,_選手名,_チーム最小背番号) :- 選手を抽出する(_チームID,_選手名,_チーム最小背番号,_残りならび), 背番号最少の(_残りならび,_チーム最小背番号). 選手を抽出する(_チームID,_選手名,_チーム最小背番号,_残りならび) :- findall([_背番号,_選手名],選手(_,_チームID,_選手名,_背番号),_背番号_選手名ならび), select([_チーム最小背番号,_選手名],_背番号_選手名ならび,_残りならび). 背番号最少の(_残りならび,_チーム最小背番号) :- forall(member([_背番号,_],_残りならび),_背番号 @>= _チーム最小背番号). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/169 # # # Oracleについてです。 # # テーブル1 # 列A(PK) # 列B # 列C # 列D # # があり、列B、列C、列Dの複合INDEXが1つ設定されています。 # # 列B+列C+ 列Dで結合した列を # 複数の値を条件に検索する必要があり、 # # WHERE 列B||列C||列D IN ('XX','XX','XX') # # でとして検索しているのですが、 # これではINDEXを使用してくれず、 # 検索が非常に遅くなってしまっています。 # (テーブル1は200万件程度あります。) # # テーブル構成は変更できず、INDEXまたは # SQLで解決する必要があるのですが、 # 何か検索を向上させる方法がありますでしょうか。 # # '列B||列C||列D IN (検索値ならび)'(_検索値ならび,_A,_B,_C,_D) :- テーブル1(_A,_B,_C,_D), '値が_B,_C,_Dのどれかと適合'(_検索値ならび,_B,_C,_D). '値が_B,_C,_Dのどれかと適合'(_検索値ならび,_B,_C,_D) :- member(_値,_検索値ならび), member(_値,[_B,_C,_D]),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/165 # # SQL server 2005  # 女子テーブル # ID  name tops pants skirt   # 1 jyoshimei m l m # 男子テーブル # ID  name tops pants # 1 danshimei xl xxxl # # というテーブルがあってそれぞれに500人ほどのデータが入っています。 # # 女子テーブルと男子テーブルの両方から pants のサイズ、トップスのサイズ、などで絞り込みしてリストを作りたいのです。女子のみスカートのサイズがあります。 # # どのように書けば良いのか教えてください。 # # '性別・topsを指定しての絞り込み'(女子,_tops下限,_tops上限,[_ID,_name,_tops,_pants,_skirt]) :- 女子テーブル(_ID,_name,_tops,_pants,_skirt), _tops >= _tops下限, _tops =< _tops上限, '性別・topsを指定しての絞り込み'(男子,_tops下限,_tops上限,[_ID,_name,_tops,_pants]) :- 男子テーブル(_ID,_name,_tops,_pants), _tops >= _tops下限, _tops =< _tops上限. '性別・pantsを指定しての絞り込み'(女子,_pants下限,_pants上限,[_ID,_name,_tops,_pants,_skirt]) :- 女子テーブル(_ID,_name,_tops,_pants,_skirt), _pants >= _pants下限, _pants =< _pants上限, '性別・pants指定しての絞り込み'(男子,_pants下限,_pants上限,[_ID,_name,_tops,_pants]) :- 男子テーブル(_ID,_name,_tops,_pants), _pants >= _pants下限, _pants =< _pants上限. '性別・tops・pantsを指定しての絞り込み'(_性別,_tops下限,_tops上限,_pants下限,_pants上限,L) :- '性別・topsを指定しての絞り込み'(_性別,_tops下限,_tops上限,L), '性別・topsを指定しての絞り込み'(_性別,_pant下限,_pants上限,L). % 以下のサイトは # 出典::SQL質疑応答スレ 13問目 #154 # Oracle10g # # 企業TBL # 1:企業ID # 2:企業名 # 3:電話番号 # 4:最終発送日 # # 上記のようなテーブルがあり、同一企業でも # 複数のレコードに登録されています。 # 電話番号が同一であれば、同一企業とみなし、 # 最終発送日を同一企業内で最新の日付で # 一斉更新したいのですが、プログラムを使わず # SQL文だけで完結することは可能でしょうか? # # 下記のSQLで表示される電話番号のデータを # MAX(最終発送日)で更新するイメージです。 # # SELECT 電話番号,MAX(最終発送日),COUNT(*) # FROM 企業TBL # GROUP BY 電話番号 # HAVING COUNT(*) > 1; # '同一企業でも複数のレコードに登録されています。電話番号が同一であれば、同一企業とみなし、最終発送日を同一企業内で最新の日付で一斉更新したい' :- 電話番号ならびを得る(_電話番号ならび), 電話番号_最終発送日ならび(_電話番号ならび,_電話番号_最終発送日ならび), 最終発送日の更新(_電話番号_最終発送日ならび). 電話番号ならびを得る(_電話番号ならび) :- setof(_電話番号,[_企業ID,_企業名,_電話番号,_最終発送日] ^ ( 企業TBL(_企業ID,_企業名,_電話番号,_最終発送日)),_電話番号ならび). 電話番号_最終発送日ならび(_電話番号ならび,_電話番号_最終発送日ならび) :- findall([_電話番号,_最終発送日],( member(_電話番号,_電話番号ならび), 最終発送日(_電話番号,_最終発送日)),_電話番号_最終発送日ならび). 最終発送日(_電話番号,_最終発送日) :- findmax(_最終発送日,( 企業TBL(_企業ID,_企業名,_電話番号,_最終発送日)),_最終発送日). 最終発送日の更新(_電話番号_最終発送日ならび) :- forall(member([_電話番号,_最終発送日],_電話番号_最終発送日ならび), 最終発送日の更新(_電話番号,_最終発送日)). 最終発送日の更新(_電話番号,_最終発送日) :- 電話番号を鍵に企業データを削除(_電話番号), assertz(企業TBL(_企業ID,_企業名,_電話番号,_最終発送日)). 電話番号を鍵に企業データを削除(_電話番号) :- retract(企業TBL(_企業ID,_企業名,_電話番号,_最終発送日_1)), fail. 電話番号を鍵に企業データを削除(_電話番号). findmax(A,B,C) :- findall(A,B,L), 最大値(L,C). 最大値(L,_最大値) :- select(_最大値,L,R), forall(member(A,R),_最大値 @>= A). % 以下のサイトは # 出典 :: #132 # 親テーブル # Id, 資産 # 1, 100 # 2, 200 # 3, 400 # # 子テーブル # Id, 親Id, 資産 # 1, 1, 10 # 2, 1, 20 # 3, 2, 10 # 4, 2, 20 # 5, 2, 30 # 6, 3, 10 # # から # Id, 資産 # 1, 60 -- 親1の子供は二人だから、各々の子に 100/2 = 50 を加算する。 # 2, 70 # 3, 76 -- 親2の子供は三人だから、各々の子に 200/3 = 66 を加算する。 # 4, 86 # 5, 96 # 6, 410 -- 親3の子供は一人だから、400 をそのまま加算する。 # # という結果を得たい。 # 要するに、親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい。 # SQL で出来ます? # # 親テーブル(1, 100). 親テーブル(2, 200). 親テーブル(3, 400). 子テーブル(1, 1, 10). 子テーブル(2, 1, 20). 子テーブル(3, 2, 10). 子テーブル(4, 2, 20). 子テーブル(5, 2, 30). 子テーブル(6, 3, 10). 親の資産を子供に分配して各々の子供の資産と合わせた額の一覧を出したい(_一覧) :- findall([_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額],子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額),_一覧). 子供の親資産と自分を含めた兄弟人数を調べて親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_Id,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- 子テーブル(_Id,_親Id,_資産), 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数), 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額). 親資産と自分を含めた兄弟人数を調べて(_Id,_親Id,_親資産,_自分を含めた兄弟人数) :- 親テーブル(_親Id,_親資産), 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数). 自分を含めた兄弟人数(_親Id,_自分を含めた兄弟人数) :- 度数(子テーブル(_,_親Id,_),_自分を含めた兄弟人数). 親資産を自分を含めた兄弟人数で割ったものに自分の資産を加える(_資産,_親資産,_自分を含めた兄弟人数,_親の資産を子供に分配して各々の子供の資産と合わせた額) :- _親の資産を子供に分配して各々の子供の資産と合わせた額 is _資産 + _親資産 // _自分を含めた兄弟人数. 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1343899481/70 # # 使用DB:postgresql # # DBにこんなテーブルがあり # name price # りんご 100 # バナナ 200 # みかん 150 # # 手元にこんなCSVデータがあって # りんご,150 # みかん,100 # # CSVのデータを元に一括でUPDATEしたいです。 # name price # りんご 150 # バナナ 200 # みかん 100 # # CSVデータの文字列加工はPHP使うので大体のことは出来ます。 # 最悪1行ずつUPDATEでいいのですが、行数が多いので出来ればSQL発行を1回にしたいです。お願いします。 # # :- dynamic(テーブル/1). 'CSVデータによってテーブルを更新する'(_CSVファイル) :- get_split_lines(_CSVファイル,[','],LL), '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(LL). '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([]). '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([L|R]) :- テーブルを更新する(L), '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(R). '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'([L|R]) :- テーブルに追加する(L), '第一項を鍵にデータが存在すれば更新、存在しなければ追加する'(R). テーブルを更新する([_1,_2]) :- retract(テーブル(_1,_)), assertz(テーブル(_1,_2)), fail. テーブルを更新する(_). テーブルに追加する([_1,_2]) :- \+(テーブル(_1,_)), assertz(テーブル(_1,_2)). % 以下のサイトは # 出典::SQL質疑応答スレ 13問目 #43 # 質問:「指定条件に一番近い最大値を持つレコード」でテーブル結合したい # 環境:postgresql 9.0 # # 価格変動テーブル # kakaku_datetime name price # 2012-08-01 10:00:00 トマト 100円 # 2012-08-01 10:00:00 バナナ 200円 # 2012-08-10 10:00:00 バナナ 180円 # 2012-08-15 10:00:00 トマト 150円 # # 売上履歴テーブル # uriage_datetime name # 2012-08-01 12:00:00 トマト # 2012-08-05 18:00:00 トマト # 2012-08-08 15:00:00 バナナ # 2012-08-16 19:00:00 トマト # # を結合させて、以下のように「その時にいくらだったか?」を含めたテーブルにしたいです。 # uriage_datetime name price # 2012-08-01 12:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-05 18:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-08 15:00:00 バナナ 200円 ←kakaku_datetime = 2012-08-01 10:00:00 のバナナの価格を取ってくる # 2012-08-16 19:00:00 トマト 150円 ←kakaku_datetime = 2012-08-15 10:00:00 のトマトの価格を取ってくる # # よろしくお願いします。 # # '「指定条件に一番近い最大値を持つレコード」でテーブル結合したい'(_uriage_datetime,_name,_price) :- 売上履歴テーブル(_uriage_datetime,_name), findmax([_kakaku_datetime,_price],( 価格変動テーブル(_kakaku_datetime,_name,_price), _uriage_datetime @>= _kakaku_datetime),[_kakaku_datetime,_price]). findmax(T,P,Max) :- findall(T,P,L), 最大値(L,Max). 最大値([A|R],_最大値) :- 最大値(R,A,_最大値). 最大値([],_最大値,_最大値). 最大値([A|R],B,_最大値) :- A @> B, 最大値(R,A,_最大値). 最大値([A|R],B,_最大値) :- A @=< B, 最大値(R,B,_最大値). % 以下のサイトは # 出典::SQL質疑応答スレ 13問目 #43 # 質問:「指定条件に一番近い最大値を持つレコード」でテーブル結合したい # 環境:postgresql 9.0 # # 価格変動テーブル # kakaku_datetime name price # 2012-08-01 10:00:00 トマト 100円 # 2012-08-01 10:00:00 バナナ 200円 # 2012-08-10 10:00:00 バナナ 180円 # 2012-08-15 10:00:00 トマト 150円 # # 売上履歴テーブル # uriage_datetime name # 2012-08-01 12:00:00 トマト # 2012-08-05 18:00:00 トマト # 2012-08-08 15:00:00 バナナ # 2012-08-16 19:00:00 トマト # # を結合させて、以下のように「その時にいくらだったか?」を含めたテーブルにしたいです。 # uriage_datetime name price # 2012-08-01 12:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-05 18:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-08 15:00:00 バナナ 200円 ←kakaku_datetime = 2012-08-01 10:00:00 のバナナの価格を取ってくる # 2012-08-16 19:00:00 トマト 150円 ←kakaku_datetime = 2012-08-15 10:00:00 のトマトの価格を取ってくる # # よろしくお願いします。 # # '「指定条件に一番近い最大値を持つレコード」でテーブル結合したい'(_uriage_datetime,_name,_price) :- 売上履歴テーブル(_uriage_datetime,_name), findmax([_kakaku_datetime,_price],( 価格変動テーブル(_kakaku_datetime,_name,_price), _uriage_datetime @>= _kakaku_datetime),[_kakaku_datetime,_price]). findmax(T,P,Max) :- findall(T,P,L), 最大値(L,Max). 最大値(L,_最大値) :- 第一要素を現在の最大値と置いて最大値を走査(L,_最大値). 第一要素を現在の最大値と置いて最大値を走査([A|R],_最大値) :- 最大値(R,A,_最大値). 最大値([],_最大値,_最大値). 最大値([A|R],B,_最大値) :- 'AがBを上回った場合はBをAに差し替え、それ以外はそのまま検索する'([A|R],B,_最大値). 'AがBを上回った場合はBをAに差し替え、それ以外はそのまま検索する'([A|R],B,_最大値) :- 'AがBを上回った場合だけ差し替える'([A|R],B,_最大値). 'AがBを上回った場合はBをAに差し替え、それ以外はそのまま検索する'([A|R],B,_最大値) :- それ以外はそのまま検索する([A|R],B,_最大値). 'AがBを上回った場合だけ差し替える'([A|R],B,_最大値) :- A @> B, 最大値(R,A,_最大値). それ以外はそのまま検索する([A|R],B,_最大値) :- A @=< B, 最大値(R,B,_最大値). % 以下のサイトは # 出典::SQL質疑応答スレ 13問目 #43 # 質問:「指定条件に一番近い最大値を持つレコード」でテーブル結合したい # 環境:postgresql 9.0 # # 価格変動テーブル # kakaku_datetime name price # 2012-08-01 10:00:00 トマト 100円 # 2012-08-01 10:00:00 バナナ 200円 # 2012-08-10 10:00:00 バナナ 180円 # 2012-08-15 10:00:00 トマト 150円 # # 売上履歴テーブル # uriage_datetime name # 2012-08-01 12:00:00 トマト # 2012-08-05 18:00:00 トマト # 2012-08-08 15:00:00 バナナ # 2012-08-16 19:00:00 トマト # # を結合させて、以下のように「その時にいくらだったか?」を含めたテーブルにしたいです。 # uriage_datetime name price # 2012-08-01 12:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-05 18:00:00 トマト 100円 ←kakaku_datetime = 2012-08-01 10:00:00 のトマトの価格を取ってくる # 2012-08-08 15:00:00 バナナ 200円 ←kakaku_datetime = 2012-08-01 10:00:00 のバナナの価格を取ってくる # 2012-08-16 19:00:00 トマト 150円 ←kakaku_datetime = 2012-08-15 10:00:00 のトマトの価格を取ってくる # # よろしくお願いします。 # # '「指定条件に一番近い最大値を持つレコード」でテーブル結合したい'(_uriage_datetime,_name,_price) :- 売上履歴テーブル(_uriage_datetime,_name), findmax([_kakaku_datetime,_price],( 価格変動テーブル(_kakaku_datetime,_name,_price), _uriage_datetime @>= _kakaku_datetime),[_kakaku_datetime,_price]). findmax(T,P,Max) :- findall(T,P,L), 最大値(L,Max). 最大値(L,_最大値) :- 第一要素を現在の最大値と置いて最大値を走査(L,_最大値). 第一要素を現在の最大値と置いて最大値を走査([A|R],_最大値) :- 最大値(R,A,_最大値). 最大値([],_最大値,_最大値). 最大値([A|R],B,_最大値) :- 'A @> B の場合はBをAに差し替える'([A|R],B,_最大値). 最大値([A|R],B,_最大値) :- 'A @=< B の場合はBに変化なし'([A|R],B,_最大値). 'A @> B の場合はBをAに差し替える'([A|R],B,_最大値) :- A @> B, 最大値(R,A,_最大値). 'A @=< B の場合はBに変化なし'([A|R],B,_最大値) :- A @=< B, 最大値(R,B,_最大値). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/987 # # データベース:MySQL 5.2 # # table bbs( # uid INT, # rid INT, # text TEXT # ); # # table users( # id INT UNIQUE, # name VARCHAR(32) # ); # # 欲しい結果のイメージ # uid, rid, uid.name, rid.name # # .name は users テーブルの name の項目 # # 掲示板で、投稿者ID (uid) と 返信先ID(rid) のそれぞれの名前を users から取得したいです。 # # '掲示板で、投稿者ID (uid) と 返信先ID(rid) のそれぞれの名前を users から取得したい'(_uid,_rid,_uid_name,_rid_name) :- bbs(_uid,_rid,_text), users(_uid,_uid_name), users(_rid,_rid_name). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #984 # ・SQL Server2008R2Express # テーブルデータ # ・2012-08-01 11:35:00, りんご, 1 # ・2012-08-01 16:22:00, みかん, 2 # ・2012-08-02 13:54:00, りんご, 2 # ・2012-08-02 14:32:00, りんご, 1 # ・2012-08-04 16:22:00, みかん, 3 # # ・欲しい結果 # 2012-08-01 # 2012-08-02 # 2012-08-04 # # ・説明 # 件数に関係なく売り上げがあった日だけのリストが欲しいのですが # うまい方法あるでしょうか # # 売上('2012-08-01 11:35:00', りんご, 1 ). 売上('2012-08-01 16:22:00', みかん, 2 ). 売上('2012-08-02 13:54:00', りんご, 2 ). 売上('2012-08-02 14:32:00', りんご, 1 ). 売上('2012-08-04 16:22:00', みかん, 3 ). 件数に関係なく売り上げがあった日(_売上のあった日) :- 件数に関係なく売り上げがあった日だけのリスト(_売上のあった日だけのリスト), member(_売上のあった日,_売上のあった日だけのリスト). 件数に関係なく売り上げがあった日だけのリスト(_売上のあった日だけのリスト) :- setof(_年月日,[_年月日] ^ 売上のあった日(_年月日),_売上のあった日だけのリスト). 売上のあった日(_年月日) :- 売上(_日付時刻,_品名,_件数), _件数 > 0, 日付時刻から年月日を切り取る(_日付時刻,_年月日). 日付時刻から年月日を切り取る(_日付時刻,_年月日) :- sub_atom(_日付時刻,0,10,_,_年月日). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/965 # # 休憩時間が設定されているときに、指定日時より'HH:MM'後の時刻を求めたいです。 # # ・データベース:PostgreSQL 8.4 # ・テーブル: # 休憩時間 # 開始時刻 終了時刻 # 08:00 08:30 # 19:00 19:30 # 22:00 22:30 # # 使うかどうかわかりませんが、次のマスタもあります。 # カレンダー # 日付 # ... # 2012-07-26 # 2012-07-27 # 2012-07-28 # ... # # ・説明 # 指定した日時から休憩時間を除いた'HH:MM'後を計算します。 # 計算結果が休憩時間内(開始終了時刻を含む)の場合は、休憩時間終了時刻を結果とします。 # # ・欲しい結果 # '2012-07-27 09:00'の'09:00'後 => '2012-07-27 18:00'(休憩時間がないのでそのまま足す) # '2012-07-27 09:00'の'10:00'後 => '2012-07-27 19:30'(10時間後は19:00の休憩と重なるので、19:30が答え) # '2012-07-27 09:00'の'11:00'後 => '2012-07-27 20:30' # '2012-07-27 09:00'の'13:00'後 => '2012-07-27 23:00'(19:00〜と22:00〜の二回の休憩を挟む) # # '指定した日時から休憩時間を除いたHH:MM後を計算します。計算結果が休憩時間内(開始終了時刻を含む)の場合は、休憩時間終了時刻を結果とします。'(_起点時刻,_時間後,_時間後の時刻) :- 休憩時間ならびと就業時間ならびを生成する(_休憩時間ならび,_就業時間ならび), 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす(_休憩時間ならび,_起点時刻,_時間後,_更新された起点時刻,_更新された時間後), 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_更新された起点時刻,_最後の休憩終了時刻,_更新された時間後,_就業時間ならび,_時間後の時刻). 休憩時間ならびと就業時間ならびを生成する(_就業時間ならび) :- findall([_開始時刻,_終了時刻],( 休憩時間(_開始時刻,_終了時刻)), _休憩時間ならび), 就業時間ならびを生成する(L,_就業時間ならび). 就業時間ならびを生成する([],[]). 就業時間ならびを生成する([[A,B],[C,D]|R1],[[B,C]|R2]) :- 就業時間ならびを生成する([[C,D]|R1],R2). 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす([],_起点時刻,_時間後,0,_時間後の時刻) :- _時間後の時刻 is _起点時刻 + _時間後,!. 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす([[_休憩起点時刻,_休憩終了時刻]|R1],_起点時刻,0,_時間後の時刻) :- _休憩起点時刻 @>= _起点時刻, 時間の引き算(_休憩起点時刻,_起点時刻,_休憩起点時刻までの時間), _休憩起点時刻までの時間 @>= _時間後, 時間の足し算(_起点時刻,_時間後,_時間後の時刻),!. 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす([[_休憩起点時刻,_休憩終了時刻]|R1],_起点時刻,_更新された時間後,_休憩終了時刻) :- _休憩起点時刻 @>= _起点時刻, 時間の引き算(_休憩起点時刻,_起点時刻,_休憩起点時刻までの時間), _休憩起点時刻までの時間 @< _時間後, 時間の引き算(_時間後,_休憩起点時刻までの時間,_更新された時間後),!. 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす([[_休憩起点時刻,_休憩終了時刻]|R1],_起点時刻,_時間後,_更新された時間後,_更新された時間後時刻) :- \+(_休憩起点時刻 @>= _起点時刻), 最初に一番間近な休憩時刻までの時間を時間後から差し引き起点をその休憩後時刻にずらす(R1,_起点時刻,_時間後,_更新された時間後,_更新された時間後時刻). 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_時間後の時刻,_,0,_,_時間後の時刻) :- !. 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_起点時刻,_,_時間後,[],_時間後の時刻) :- 時間の足し算(_起点時刻,_時間後,_時間後の時刻),!. 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_起点時刻,_,_時間後,[[A,B]|R1],_時間後の時刻) :- 時間の引き算(B,A,_次の就業時間枠), _時間後 @=< _次の就業時間枠, 時間の足し算(A,_時間後,_時間後の時刻),!. 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_起点時刻,_最後の休憩終了時刻,_時間後,[[A,B]],_時間後の時刻) :- 時間の引き算(B,A,_次の就業時間枠), 時間の引き算(_時間後,_次の就業時間枠,_更新された時間後), 時間の足し算(_最後の休憩終了時刻 +_時間後,_時間後の時刻),!. 次の就業時間の始まりまでの間の就業時間を時間後から削っていく(_起点時刻,_最後の休憩終了時刻,_時間後,[[A,B],[C,D]|R1],_時間後の時刻) :- 時間の引き算(B,A,_次の就業時間枠), 時間の引き算(_時間後,_次の就業時間枠,_更新された時間後), 時間の足し算(C,_時間後,_時間後の時刻),!. 時間の引き算(_時刻_1,_時刻_2,_時刻_3) :- '時刻から年・月・日・時・分を得る'(_時刻_1,_年_1,_月_1,_日_1,_時_1,_分_1), '時刻から年・月・日・時・分を得る'(_時刻_2,_年_2,_月_2,_日_2,_時_2,_分_2), 時間の引き算(_時刻_1,_年_1,_月_1,_日_1,_時_1,_分_1,_年_2,_月_2,_日_2,_時_2,_分_2,_年,_月,_日,_時,_分), atomic_list_concat([_年,-,_月,-,_日,' ',_時,':',_分],_時刻_3). 時間の足し算(_時刻_1,_時刻_2,_時刻_3) :- '時刻から年・月・日・時・分を得る'(_時刻_1,_年_1,_月_1,_日_1,_時_1,_分_1), '時刻から年・月・日・時・分を得る'(_時刻_2,_年_2,_月_2,_日_2,_時_2,_分_2), 時間の足し算(_時刻_1,_年_1,_月_1,_日_1,_時_1,_分_1,_年_2,_月_2,_日_2,_時_2,_分_2,_年,_月,_日,_時,_分), atomic_list_concat([_年,-,_月,-,_日,' ',_時,':',_分],_時刻_3). '時刻から年・月・日・時・分を得る'(_時刻,_年,_月,_日,_時,_分) :- split(_時刻,['-',':',' '],[_年,_月,_日,_時,_分]),!. 時間の足し算(_年_1,_月_1,_日_1,_時_1,_分_1,_年_2,_月_2,_日_2,_時_2,_分_2,_年,_月,_日,_時,_分) :- _年_3 is _年_1 + _年_2, _月_3 is _月_1 + _月_2, _日_3 is _日_1 + _日_2, _時_3 is _時_1 + _時_2, _分_3 is _分_1 + _分_2, 時間の補正(_年_3,_月_3,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分). 時間の補正(_年_3,_月_3,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分) :- _分_3 >= 60, _分_4 is _分_3 - 60, _時_4 is _時_3 + 1, 時間の補正(_年_3,_月_3,_日_3,_時_4,_分_4,_年,_月,_日,_時,_分),!. 時間の補正(_年_3,_月_3,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分) :- _時_3 >= 24, _時_4 is _時_3 - 24, _日_4 is _日_3 + 1, 時間の補正(_年_3,_月_3,_日_4,_時_4,_分_3,_年,_月,_日,_時,_分),!. 時間の補正(_年_3,_月_3,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分) :- 月末補正(_年_3,_月_3,_日_3,_月_4,_日_4), 時間の補正(_年_3,_月_4,_日_4,_時_3,_分_3,_年,_月,_日,_時,_分). 時間の補正(_年_3,_月_3,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分) :- _月_3 > 12, _年_4 is _年_3 + 1, 時間の補正(_年_4,1,_日_3,_時_3,_分_3,_年,_月,_日,_時,_分),!. 時間の補正(_年,_月,_日,_時,_分,_年,_月,_日,_時,_分). 月末補正(_年_3,_月_3,_日_3,_月_4,_日_4) :- % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/963 # # ・DBMS名とバージョン # SQLite3 # # ・テーブルデータ # テーブル名 directory # folder   val # /contact/  index # /test/    connect # /example/  foo # /hoge/    bar # /fuga/    com # # ・欲しい結果 # 問い合わせ内容とfolderの内容が部分一致していればvalを返す # /contact/ にアクセスがあった場合はindexを返す # /contact/foo の場合もindexを返す # # ・説明 # $folder_hensuu = "%/contact/%"; # select * from directory WHERE folder LIKE $folder_hensuu # とした場合はヒットするが # # $folder_hensuu = "%/contact/hogehoge%"; # の場合はヒットしない。 # この場合はどうすれば一致判定が出来るようになりますか? # # '欲しい結果'(_検索語,_val) :- direcrory(_folder,_val), sub_atom(_folder,_,_,_,検索語). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/959 # # MySQL 5.1です。 # # テーブル1 # 15:30:20 カツ丼 # 15:35:40 天丼 # 15:50:15 他人丼 # # テーブル2 # 15:30:30 400円 # 15:35:45 550円 # 15:51:00 480円 # # というテーブルがあって、テーブル1と2の時刻が近いものをマッチさせて # 15:30:20 カツ丼 400円 # 15:35:40 天丼 550円 # 15:50:15 他人丼 480円 # # のような結果を出したいのですが、どのようにすればいいでしょうか。 # # よろしくお願いします。 # # テーブル1と2の時刻が近いものをマッチさせる(_時刻,_商品名,_価格) :- テーブル1(_時刻,_商品名), テーブル1と2の時刻が近いもの(_時刻,_時刻以前,_時刻以後), 時刻が近いものをマッチさせる(_時刻,_時刻以前,_時刻以後,_価格). テーブル1と2の時刻が近いもの(_時刻,_時刻以前,_時刻以後) :- findmax(_時刻_2,( テーブル2(_時刻_2,_価格), _時刻 @>= _時刻_2), _時刻以前), findmin(_時刻_2,( テーブル2(_時刻_2,_価格), _時刻 @=< _時刻_2), _時刻以後). 時刻が近いものをマッチさせる(_,[],_時刻以後,_価格) :- テーブル2(_時刻以後,_価格),!. 時刻が近いものをマッチさせる(_,_時刻以前,[],_価格) :- テーブル2(_時刻以前,_価格),!. 時刻が近いものをマッチさせる(_時刻,_時刻以前,_時刻以後,_価格) :- '時刻を秒単位に変換してから、近い時刻を得る'(_時刻,_時刻以前,_時刻以後,_近い時刻), テーブル2(_近い時刻,_価格). '時刻を秒単位に変換してから、近い時刻を得る'(_時刻,_時刻以前,_時刻以後,_近い時刻) :- 時刻を秒単位に変換して(_時刻,_秒), 時刻を秒単位に変換して(_時刻以前,_秒_1), 時刻を秒単位に変換して(_時刻以後,_秒_2), 近い時刻を得る(_秒,_時刻以前,_秒_1,_時刻以後,_秒_2,_近い時刻). 時刻を秒単位に変換して(_時_1,_分_1,_秒_1,_秒) :- _秒 is 3600 * _時_1 + 60 * _分_1 + _秒_1. 近い時刻を得る(_秒,_時刻以前,_秒_1,_時刻以後,_秒_2,_時刻以前) :- abs(_秒_1 - _秒) =< abs(_秒_2 - _秒),!. 近い時刻を得る(_秒,_時刻以前,_秒_1,_時刻以後,_秒_2,_時刻以後). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/953 # # MySQL5.1 # # セール価格表(P) # 商品CD 適用日 単価 # aaa 2012-08-01 2500 # aaa 2012-08-20 3000 # bbb 2012-08-01 10000 # bbb 2012-08-15 8500 # # 予約表(Y) # 商品CD 購入日 数量 # aaa 2012-08-01 2 # aaa 2012-08-05 3 # aaa 2012-08-25 1 # bbb 2012-08-13 4 # bbb 2012-08-19 5 # # ほしい表 # aaa 2012-08-01 2 2500 # aaa 2012-08-05 3 2500 # aaa 2012-08-25 1 3000 # bbb 2012-08-13 4 10000 # bbb 2012-08-19 5 8500 # # 購入日時点で適用日以降の単価が反映された表を得るにはどうしたらいいでしょうか # # '購入日時点で適用日以降の単価が反映された表を得る'(_商品CD,_購入日,_数量,_単価) :- 予約表(_商品CD,_購入日,_数量), '購入日時点で適用日以降の単価が反映された表を得る'(_商品CD,_購入日,_単価). '購入日時点で適用日以降の単価が反映された表を得る'(_商品CD,_購入日,_単価) :- findmax([_適用日,_単価],( セール価格表(_商品CD,_適用日,_単価), _購入日 @>= _適用日), [_適用日,_単価]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/945 # # ・DBMS名とバージョン MySQL 5.1 # ・テーブルデータ # CSVファイル # "犬","シベリアンハスキー" # "猫","マンチカン" # "熊猫","レッサーパンダ" # ・欲しい結果 # インポートして、次のようにしたい、要するに連番をつけたい # ID 動物 種類 # 1 犬 シベリアンハスキー # 2 猫 マンチカン # 3 熊猫 レッサーパンダ # ・説明 # インポートするときにdefaultをつければいいのですが、SQL文で書けないでしょうか。 # 'CSVファイルを連番をつけてインポートする'(_CSVファイル) :- 'CSVファイルを'(_CSVファイル,LL), 連番をつけてインポートする(LL). 'CSVファイルを'(_CSVファイル,LL) :- get_split_lines(_csvファイル,[','],LL). 連番をつけてインポートする(LL) :- append(L0,[L|R],LL), 連番をつけて(L0,L,P), assertz(P), R = []. 連番をつけて(L0,L,P) :- length([_|L0],N), P =.. [テーブル,N|L]. % 課題の文("インポートして、次のようにしたい、要するに連番をつけたい")を % 若干組み替えて、"CSVファイルを連番をつけてインポートする"とした。 % 一般論としては好ましいことではないが、述語定義をしていくうちに、これは % 課題の文に問題があるということになって遡って定義を書き換えることはある。 % Prologは国語だの所以か。 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/932 # # SQLの質問がありまして、書きます。 # # Aテーブル # A B C # 1 11 # 2 22 # 3 33 # # # Bテーブル # A B C # 4 44 1 # 5 55 2 # 6 66 # # 欲しい結果 # A B # 1 44 # 2 55 # 3 33 # 6 66 # # BテーブルのCがAテーブルのAと一致したらBテーブル参照したいですが、A項目のみ値をAテーブルの値にしたいです。 # 何かアドバイスお願いします。。。。。 # 調べても、よくわからなかったので。。。 # お願いします。。。 # 'BテーブルのCがAテーブルのAと一致したらBテーブル参照したいですが、A項目のみ値をAテーブルの値にしたいです。'(A,B) :- findall([A,C],( 'Aテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はBの値はBテーブルのものに置換される'(A,C)), L1), findall([A,B],( 'Bテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はこれを除く'(A,B,C)), L2), append(L1,L2,L), member([A,B],L). 'Aテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はBの値はBテーブルのものに置換される'(A,X) :- 'Aテーブル'(A,B), 'Bテーブルと結合可の時はBテーブルのCを使う'(A,C). 'Bテーブルの値を収集する。ただし、AテーブルAとBテーブルをCを鍵に結合できる時はこれを除く'(A,B,C) :- 'Bテーブル'(A,B,C), 'Aテーブルと結合可のものは除く'(C). 'Bテーブルと結合可の時はBテーブルのCを使う'(A,C) :- 'Bテーブル'(_,C,A),!. 'Bテーブルと結合可の時はBテーブルのCを使う'(A,A). 'Aテーブルと結合可のものは除く'(C) :- \+('Aテーブル'(_,C)). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/930 # # ・DBMS名とバージョン # SQLite3 # ・テーブルデータ # tbl1 tid(auto), name(text) # tbl2 tid(int), sid(int) # tbl3 sid(auto), tag(text),type(int) # # ざっとこんな感じでnameに対して複数のタグを持っている # といった感じのテーブルに対して、データを入れたいと思っています。 # で、バックアップがCSVで「name,tag...」という形式で大量にあるのですが、 # タグテーブルに無ければ追加、名前テーブルに追記、連結データを追加、 # と手数が思ってた以上に多いので、 # 挿入の手数をもう少し減らせる手段とかありませんか? # 'バックアップがCSV(「name,tag...」)の情報を追加する'(_バックアップCSVファイル) :- open(_バックアップCSVファイル,read,Instream), 'Instreamの情報を追加する'(Instream), close(Instream). 'Instreamの情報を追加する'(Instream) :- at_end_of_stream(Instream). 'Instreamの情報を追加する'(Instream) :- get_line(Instream,Line), split(Line,[','],[_name|_tagならび]), テーブルに追加する(_name,_tagならび), 'Instreamの情報を追加する'(Instream). テーブルに追加する(_name,_tagならび) :- tbl1(_tid,_name), 'tag情報をtbl3とtbl2に追加する'(_tid,_tagならび),!. テーブルに追加する(_name,_tagならび) :- \+(tbl1(_tid,_name)), 新しいtidを取得する(_tid), assertz(tbl1(_tid,_name)), 'tag情報をtbl3とtbl2に追加する'(_tid,_tagならび). 'tag情報をtbl3とtbl2に追加する'(_tid,_tagならび) :- append(_,[_tag|R],_tagならび), 新しいsidを取得する(_sid), assertz(tbl3(_sid,_tag)), assertz(tbl2(_tid,_sid)), R = [],!. 新しいtidを取得する(_tid) :- repeat, _tid is random(99999999) + 1, \+(tbl1(_tid,_)),!. 新しいsidを取得する(_sid) :- repeat, _sid is random(99999999) + 1, \+(tbl3(_sid,_)),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/927 # # ・バージョン # MySQL5.5 # # ・テーブルデータ # time (TIME), num1 (INT), num2 (INT) # # 00:00:00, 1, 0 # 00:00:10, 2, 0 # 00:00:20, 3, 2 # 00:00:30, 4, 3 # 00:00:40, 5, 3 # # ・欲しい結果 # 00:00:20, 3, 2 # 00:00:30, 4, 3 # 00:00:40, 5, 3 # # ・説明 # time(時刻)が新しい(最近の)方から3行ぬきだし、 # timeが昇順になるように並べます。 # SELECT文でうまいことできないでしょうか。 # よろしくお願いします。 # # 'time(時刻)が新しい(最近の)方から3行ぬきだし、timeが昇順になるように並べます。'(_time,_num1,_num2) :- findall([_time,_num1,_num2],( テーブルデータ(_time,_num1,_num2)), _テーブルデータ), 整列(_テーブルデータ,_整列したテーブルデータ), append(_,[L_1,L_2,L_3],_整列したテーブルデータ), member([_time,_num1,_num2],[L_1,L_2,L_3]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/918 # # ・DBMS名とバージョン # MySQL5 # ・テーブルデータ # name (verchar) # # abc040 # abc100 # abc90 # abc20 # abc1000 # # ・欲しい結果 # nameはユニーク # abcは固定、そのあとに数値文字列 # ソートして、数値文字列の大きい順に抽出したい # # abc1000 # abc100 # abc90 # abc040 # abc20 # # ・説明 # '欲しい結果 nameはユニーク abcは固定、そのあとに数値文字列 ソートして、数値文字列の大きい順に抽出したい'(_name) :- findall([N,_name], テーブルデータ(_name), sPLIT(_name,[abc],[_,N])), L), 降順にソートする(L1,L3), member([_,_name],L3). 降順にソートする(L1,L3) :- sort(L1,L2), reverse(L2,L3). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/911 # # 【質問テンプレ】 # ・SQLite3 # ・テーブル # id,unixtime # 100001,1341404056 # 100001,1341997094 # 100001,1341987930 # 100002,1341997860 # 100002,1341989037 # # ・欲しい結果 # 100001,1341997094 # 100002,1341997860 # # ・説明 # 上記テーブルでid毎にunixtimeが一番大きいデータを1つだけ取り出すには # どのようなクエリでできるでしょうか。1回では無理でしょうか。 # # id,unixtime,value # "1" "1341404056" "内容1" # "1" "1341997094" "内容2" # "1" "1341987930" "内容3" # "2" "1341997860" "内容1" # "2" "1341989037" "内容2" # '上記テーブルでid毎にunixtimeが一番大きいデータを1つだけ取り出す'(_id,_unixtime,_value) :- setof(_id,[_id,_unixtime,_value] ^ ( テーブル(_id,_unixtime,_value)),L1), member(_id,L1), findmax([_unixtime,_id,_value],( テーブル(_id,_unixtime,_value)),[_unixtime,_id,_value]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/902 # # DBMS:SQLite3.7.12.1(System.Data.SQLite1.0.81.0) # # [テーブルデータ] # # CREATE TABLE tblA( # id INTEGER, # status001 INTEGER, # status002 INTEGER, # status003 INTEGER, # status004 INTEGER, # . # . # . # status300 INTEGER # ); # # id |status001|status002|.... . |status300| # ----+--------+--------+ +--------| # 1| 0 | 0 | | 0 | # 2| 1 | 0 | | 0 | # 3| 0 | 0 | | 1 | # 4| 0 | 1 | | 1 | # 5| 0 | 0 | | 0 | # 6| 1 | 1 | | 0 | # 7| 0 | 1 | | 0 | # 8| 1 | 1 | | 1 | # 9| 1 | 1 | | 0 | # # 想定レコード数 50,000〜2000,000 # # [欲しい結果] # ------------------------------------------- # status001 | 4 //status001=1であるレコード数 # status002 | 5 //status002=1であるレコード数 # . # . # . # status300 | 3 //status300=1であるレコード数 # # 正規化に問題があるように思えますが # これらを一度のSQLで取得出来ないでしょうか。 # この結果を最も速く取得する方法を模索しています(__) # # 各フィールドの値が1である組数(_フィールド名,_組数) :- between(1,300,N), 引数ならびを生成し指定フィールドを1とする(L1), member([_フィールド名,L],L1), 指定フィールドが1の組数(L,_組数). 引数ならびを生成し指定フィールドを1とする(N,_フィールド名,L) :- フィールド名の復元(N,_フィールド名), length(L,300), nth1(N,L,1). 指定フィールドが1の組数(L,_組数) :- P =.. [tblA,_id|L], count(P,_組数), _組数 > 0. フィールド名の復元(_フィールド名_0,N,_フィールド名) :- '3要素のフィールド名識別名をならびで確保'(L), number_chars(N,Chars), append(L1,Chars,L), 変数として残った要素は0に単一化(L1), ならび要素を結合したものがフィールド名([_フィールド名_0|L],_フィールド名). '3要素のフィールド名識別名をならびで確保'(L) :- length(L,3). append([],L1,L2,L) :- append(L1,L2,L). append([A|R1],L1,L2,[A|R]) :- append(R1,L1,L2,R). 変数として残った要素は0に単一化([]). 変数として残った要素は0に単一化(['0'|R]) :- 変数として残った要素は0に単一化(R). ならび要素を結合したものがフィールド名(L,_フィールド名) :- atomic_list_concat(L,_フィールド名). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/900 # # テーブル名:PRODUCT # # CODE, PRODUCT_NAME, M_Type # 001,パソコン,01 # 002,パソコン NEC,01 # 003,パソコン FUJITSU,01 # 004,パソコン,01 # 005,パソコン,02 # 006,プリンター,03 # ・・・ # # とあるとき # # # PRODUCT_NAMEの重複するデータを抽出するにはどうしたらいいでしょうか? # # 001,パソコン,01 # 004,パソコン,01 # 005,パソコン,02 # # が出て欲しい # # # PRODUCT_NAMEかつM_Typeも一緒のデータを抽出するにはどうしたらいいでしょうか? # # 001,パソコン,01 # 004,パソコン,01 # # が出て欲しい # # お願いします。 # 'PRODUCT_NAMEの重複するデータを抽出する'(_CODE,_PRODUCT_NAME,_M_Type) :- setof([_PRODUCT_NAME,_M_Type],[_CODE,_PRODUCT_NAME,_M_Type] ^ ( 'PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type)),L1), findall([_PRODUCT_NAME,_M_Type],( member(_PRODUCT_NAME,L1), count('PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type),COUNT), COUNT >= 2),L2), member([_PRODUCT_NAME,_M_Type],L2), 'PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/900 # # テーブル名:PRODUCT # # CODE, PRODUCT_NAME, M_Type # 001,パソコン,01 # 002,パソコン NEC,01 # 003,パソコン FUJITSU,01 # 004,パソコン,01 # 005,パソコン,02 # 006,プリンター,03 # ・・・ # # とあるとき # # # PRODUCT_NAMEの重複するデータを抽出するにはどうしたらいいでしょうか? # # 001,パソコン,01 # 004,パソコン,01 # 005,パソコン,02 # # が出て欲しい # # # PRODUCT_NAMEかつM_Typeも一緒のデータを抽出するにはどうしたらいいでしょうか? # # 001,パソコン,01 # 004,パソコン,01 # # が出て欲しい # # お願いします。 # 'PRODUCT_NAMEの重複するデータを抽出する'(_CODE,_PRODUCT_NAME,_M_Type) :- setof(_PRODUCT_NAME,[_CODE,_PRODUCT_NAME,_M_Type] ^ ( 'PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type)),L1), findall(_PRODUCT_NAME,( member(_PRODUCT_NAME,L1), count('PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type),COUNT), COUNT >= 2),L2), member(_PRODUCT_NAME,L2), 'PRODUCT'(_CODE,_PRODUCT_NAME,_M_Type). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/881 # # 入庫、出庫、締め用のテーブルがあるとし、それぞれ、HEADER、DETAILがあり # HEADERには、入出庫、締め番号、日付、ACTIVE(該当月Y/N)など # DETAILには、アイテムと数量が入っているとします # そこでDAILY MOVEMENTを作成したいのですが、 # 1~31のように固定ではなく、トランザクションがあった日のみ、つまり # SELECT TRANS_DATE FROM # (SELECT TRANS_DATE FROM INCOMING WHERE ACTIVE='Y' # UNION ALL # SELECT TRANS_DATE FROM OUTGOING WHERE ACTIVE='Y') T_DATE # group by TRANS_DATE ORDER BY 1 # でTRANS_DATE抽出しておきます # 結果をREPORT WRITEとかWEBを用いずに # TRANS_DATEが横方向に1行目に表され、 # 2行目1カラムは、アイテム、2カラム目はOPENING数量で、 # 3カラム以降はIN又はOUTの数量を表記したいのですが # JUL/8はトランザクションがありませんので表記されていません # 最後のカラムは、その月の現在までのSUMMARY # #   JUL/7  JUL/9           JUL # IN OUT IN OUT IN OUT CLOSE #    3 5   3 3 8  15 # # みなさんなら、どうSQLを書きますか、教えてください # # % % 入庫(_入出庫,_締め番号,_日付,_ACTIVE,_アイテム,_数量). % % 出庫(_入出庫,_締め番号,_日付,_ACTIVE,_アイテム,_数量). % % 締め用(_入出庫,_締め番号,_日付,_ACTIVE,_アイテム,_数量). % みなさんならどう書きますか :- 重複のない入出庫日付ならび(_重複のない入出庫日付ならび), 表を作成する(_重複のない入出庫日付ならび,_表), '入庫・出庫・締め用数量合計'(_入庫数量合計,_出庫数量合計,_締め用数量合計), 転置(_表,_転置された表), 表を出力する(_転置された表,_入庫数量合計,_出庫数量合計,_締め用数量合計). 重複のない入出庫日付ならび(_重複のない入出庫日付ならび) :- setof(_日付_1,[_入出庫,_締め番号,_日付,_ACTIVE,_アイテム,_数量] ^ ( 入庫(_入出庫,_締め番号,_日付_1,'Y',_アイテム,_数量)),_入庫日付ならび), setof(_日付_2,[_入出庫,_締め番号,_日付,_ACTIVE,_アイテム,_数量] ^ ( 出庫(_入出庫,_締め番号,_日付_2,'Y',_アイテム,_数量)),_出庫日付ならび), append(_入庫日付ならび,_出庫日付ならび,_入出庫日付ならび), setof(_日付,member(_日付,_入出庫日付ならび),_重複のない入出庫日付ならび). 表を作成する(_重複のない入出庫日付ならび,_表) :- findall([_日付,_入庫数量,_出庫数量],( member(_日付,_重複のない入出庫日付ならぴ), 入庫数量を得る(_日付,_入庫数量), 出庫数量を得る(_日付,_出庫数量), 表示パターン(_入庫数量,_出庫数量,_表示パターン)), _表). 入庫数量を得る(_日付,_入庫数量) :- 入庫(_入出庫,_締め番号,_日付,'Y',_アイテム,_入庫数量),!. 入庫数量を得る(_日付,0.0). 出庫数量を得る(_日付,_出庫数量) :- 入庫(_入出庫,_締め番号,_日付,'Y',_アイテム,_出庫数量),!. 出庫数量を得る(_日付,0.0). '入庫・出庫・締め用数量合計'(_入庫数量合計,_出庫数量合計,_締め用数量合計) :- findsum(_数量,( 入庫(_入出庫,_締め番号,_日付,'Y',_アイテム,_数量)), _入庫数量合計), findsum(_数量,( 出庫(_入出庫,_締め番号,_日付,'Y',_アイテム,_数量)), _出庫数量合計), findsum(_数量,( 締め用(_入出庫,_締め番号,_日付,'Y',_アイテム,_数量)), _締め用数量合計). 表示パターン(_入庫数量,0.0,1) :- \+(_入庫数量 = 0.0),!. 表示パターン(0.0,_出庫数量,2) :- \+(_出庫数量 = 0.0),!. 表示パターン(_,_,3). 表を出力する([_日付ならび,_パターンならび,_入庫数量ならび,_出庫数量ならび],_入庫数量合計,_出庫数量合計,_締め用数量合計) :- 日付を表示する(_日付ならび), '入庫・出庫・合計見出し'(_パターンならび), 数量ならびを表示する(_入庫数量ならび,_出庫数量ならび), '入庫数量合計・出庫数量合計・締め用数量合計表示'(_入庫数量合計,_出庫数量合計,_締め用数量合計). 日付を表示する([]) :- write('\n'). 日付を表示する([_日付|R]) :- 日付表示文字列(_日付,_日付表示文字列), write('%12c',[_日付表示文字列]), 日付を表示する(R). 日付表示文字列(_日付,_日付表示文字列) :- sub_atom(_日付,4,2,_月), sub_atom(_日付,6,2,_日), atomic_list_concat([_月,'/',_日],_日付表示文字列). '入庫・出庫・合計見出し'([]) :- writef(' 入庫 出庫 締め用 \n'). '入庫・出庫・合計見出し'([_パターン|R]) :- '入庫・出庫・合計見出し表示文字列'(_パターン,_表示文字列), writef('%t',[_表示文字列]), '入庫・出庫・合計見出し'(R). '入庫・出庫・合計見出し表示文字列'(1,' 入庫 '). '入庫・出庫・合計見出し表示文字列'(2,' 出庫 '). '入庫・出庫・合計見出し表示文字列'(3,' 入庫 出庫 '). 数量ならびの表示([]) :- 数量ならびを表示する([_入庫|R1],[_出庫|R2]) :- 数量表示文字列(_入庫数量,_出庫数量,_入庫表示文字列,_出庫表示文字列), writef(' %t %t ',[_入庫表示文字列,_出庫表示文字列]), 数量ならびを表示する(R1,R2). 数量表示文字列(0.0,_出庫数量,' ',_出庫表示文字列) :- swritef(_出荷表示文字列,' %4r ',[_出庫数量]),!. 数量表示文字列(0.0,_入庫数量,_入庫表示文字列,' ') :- swritef(_入庫表示文字列,' %4r ',[_入庫数量]),!. 数量表示文字列(_入荷数量,_出庫数量,_入庫数量文字列,_出庫表示文字列) :- swritef(_入庫表示文字列,' %4r ',[_入庫数量]), swritef(_出庫表示文字列,' %4r ',[_出庫数量]),!. '入庫数量合計・出庫数量合計・締め用数量合計表示'(_入庫数量合計,_出庫数量合計,_締め用数量合計) :- writef(' %4r %4r %4r\n',[_入庫数量合計,_出庫数量合計,_締め用数量合計]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/835 # # ある整数型のカラムnumがあって、 # その内容が、100以下の素数であるレコードだけ抜き出すために # SQLを簡潔に書く方法はありますでしょうか # # where num=2 or num=3 or num=5 (略) num=89 or num=97 # と書いてもいいんですが、 # たとえば # where num={2,3,5,7,11,(略),83,89,97} # のようなまとめた書き方があったら教えてください # # 'ある整数型のカラムがあって、その内容が、100以下の素数であるレコードだけ抜き出す'(_カラム,_値) :- 'n以下の素数'(100,_素数ならび), テーブル(_カラム,_値), member(_カラム,_100以下の素数ならび). 'n以下の素数'(_n以下,_素数ならび) :- findall(_数,( between(2,_n以下,_数)), _2以上_n以下の数ならび), エラトステネスの篩(_2以上_n以下の数ならび,_素数ならび). エラトステネスの篩([],[]) :- !. エラトステネスの篩([A|R1],[A|R2]) :- エラトステネスの篩(A,R1,L), エラトステネスの篩(L,R2). エラトステネスの篩(_,[],[]) :-!. エラトステネスの篩(N,[A|R1],R2) :- 0 is A mod N, エラトステネスの篩(N,R1,R2),!. エラトステネスの篩(N,[A|R1],[A|R2]) :- エラトステネスの篩(N,R1,R2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/816 # # table1 # id | name # ----------- # 0 | りんご # 1 | みかん # # table2 # no | id # ---------- # 0 | 0 # 1 | 0 # 2 | 1 # 3 | 1 # 4 | 1 # # この二つのテーブルから以下の結果を得るSQLの書き方を教えてください # id | name | num # ------------------- # 0 | りんご | 2 # 1 | みかん | 3 # # select id, name, (select count(code) from table2 as t2, table1 as t1 where t1.id=t2.code) as num from table1; # 自分で考えた↑では2行ともnumが5になってしまいました # # SELECT id, COUNT(id) # FROM table2 # GROUP BY id # # の結果と table1 を結合 # table1(0,りんご). table1(1,みかん). table2(0,0). table2(1,0). table2(2,1). table2(3,1). table2(4,1). 'table2をidで集約したテーブルにtable1を結合する'(_id,_name,_度数) :- setof(_id,[_no,_id] ^ ( table2(_no,_id)),_idならび), member(_id,_idならび), count(table2(_,_id),_度数), table1(_id,_name). % findsetof/3 % count/2 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/787 # # id5とid10という2つの情報しかないのですが # id5がもつc1とid10がもつc1を交換するとき # どういうクエリーをかけばよいでしょうか? # # 1.select c1 from t where id=5 or id=10 order by id # 2.begin transaction # 3.update t set c1=? where id=5 (?は1でとったid10のc1値) # 4.update t set c1=? where id=10 (?は1でとったid5のc1値) # 5.commit # # 自分の能力ではこんな手順が限界ですが # サブクエリーを駆使したらupdate1文でいけたりするのでしょうか? # もしできたらどんな感じの文になるか教えていただきたいです # 'id5とid10という2つの情報しかないのですがid5がもつc1とid10がもつc1を交換する' :- '引数の数,c1の位置,idの位置'(_引数の数,_c1の位置,_idの位置), idが5の処理(_引数の数,_c1の位置,_idの位置), idが10の処理(_引数の数,_c1の位置,_idの位置), 交換する(L0_1,L0_2,R1,R2). '引数の数,c1の位置,idの位置'(_引数の数,_c1の位置,_idの位置) :- findmax(_位置,( テーブル定義(t,_位置,_), _引数の数), テーブル定義(t,_c1の位置,c1), テーブル定義(t,_idの位置,id). idが5の処理(_引数の数,_c1の位置,_idの位置,L0_1,R1) :- 'idが5のデータを一旦削除する'(_引数の数,_c1の位置,_idの位置,L1), 'L1をc1の前と後に分解'(L1,L0_1,R1). idが5のデータを一旦削除する(_引数の数,_c1の位置,_idの位置,L1) :- length(L1,_引数の数), P =.. [t|L1], nth1(_c1の位置,L1,_c1_1), nth1(_idの位置,L1,5), retract(P). idが10の処理(_引数の数,_c1の位置,_idの位置,L0_2,R2) :- idが10のデータを一旦削除する(_引数の数,_c1の位置,_idの位置,L2), 'L1をc1の前と後に分解'(L2,L0_2,R2). idが10のデータを一旦削除する(_引数の数,_c1の位置,_idの位置,L2) :- length(L2,_引数の数), P =.. [t|L2], nth1(_c1の位置,L2,_c1_2), nth1(_idの位置,L2,10), retract(P). 'L1をc1の前と後に分解'(L1,L0_1,R1) :- length([_|L0_1],_c1の位置), append(L0_1,[A|R1],L1). 交換して定義する(L0_1,L0_2,R1,R2) :- append(L0_1,[B|R1],L1), append(L0_2,[A|R2],L2), P_1 =.. [t|L1], P_2 =.. [t|L2], asserta(P_1), asserta(P_2). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #773 # ・DBMS名とバージョン: Access2003 # ・テーブルデータ: ID、作業開始日、作業完了日、作業区分 # ・欲しい結果 #  一定期間の作業開始日及び作業完了日を日付別にカウントしたい。 # ・説明 # 例えば、2012/06/01から2012/06/07の期間を指定した場合、以下の様に取得したい。 # # 日付     作業開始 作業完了 # 2012/06/01    10      10 # 2012/06/02     5      5 # 2012/06/03    20      15 # 2012/06/04    21      20 # 2012/06/05     7      10 # 2012/06/06    10      15 # 2012/06/07     4      10 # # '一定期間の作業開始及び作業完了を日付別に作業開始・終了度数を得る'(_期間日下限,_期間日上限,_日付,_作業開始度数,_作業終了度数) :- 一定期間の作業開始及び作業完了を(_期間日下限,_期間日上限,_日付ならび), '日付別に作業開始・終了度数を得る'(_日付ならび,_日付,_作業開始度数,_作業終了度数). 一定期間の作業開始及び作業完了を(_期間日下限,_期間日上限,_日付ならび) :- setof(_日付,[_ID,_作業開始日,_作業完了日,_作業区分,_期間日下限,_期間日上限,_日付] ^ ( テーブルデータの作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付)),_日付ならび). テーブルデータの作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付) :- テーブルデータ(_ID,_作業開始日,_作業完了日,_作業区分), 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_日付). 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_作業開始日) :- _作業開始日 @>= _期間日下限, _作業開始日 @=< _期間日上限. 作業開始日か作業完了日が期間内(_期間日下限,_期間日上限,_作業開始日,_作業完了日,_作業完了日) :- _作業完了日 @>= _期間日下限, _作業完了日 @=< _期間日上限. '日付別に作業開始・終了度数を得る'(_日付ならび,_日付,_作業開始度数,_作業終了度数) :- 日付別に(_日付ならび,_日付), '作業開始・終了度数を得る'(_日付,_作業開始度数,_作業終了度数). 日付別に(_日付ならび,_日付) :- member(_日付,_日付ならび). '作業開始・終了度数を得る'(_日付,_作業開始度数,_作業終了度数) :- 度数(テーブルデータ(_,_日付,_,_),_作業開始度数), 度数(テーブルデータ(_,_,_日付,_),_作業終了度数). 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). テーブルデータ(1,'20120401','20120517','A'). テーブルデータ(2,'20120401','20120528','A'). テーブルデータ(3,'20120401','20120526','A'). テーブルデータ(4,'20120401','20120524','A'). テーブルデータ(5,'20120401','20120526','A'). テーブルデータ(6,'20120401','20120517','A'). テーブルデータ(7,'20120401','20120413','A'). テーブルデータ(8,'20120401','20120410','A'). テーブルデータ(9,'20120401','20120402','A'). テーブルデータ(10,'20120401','20120403','A'). テーブルデータ(11,'20120401','20120408','A'). テーブルデータ(12,'20120401','20120521','A'). テーブルデータ(13,'20120401','20120420','A'). テーブルデータ(14,'20120401','20120424','A'). テーブルデータ(15,'20120402','20120402','A'). テーブルデータ(16,'20120402','20120408','A'). テーブルデータ(17,'20120402','20120524','A'). テーブルデータ(18,'20120402','20120418','A'). テーブルデータ(19,'20120402','20120413','A'). テーブルデータ(20,'20120402','20120410','A'). テーブルデータ(21,'20120402','20120429','A'). テーブルデータ(22,'20120402','20120411','A'). テーブルデータ(23,'20120402','20120404','A'). テーブルデータ(24,'20120402','20120522','A'). テーブルデータ(25,'20120402','20120404','A'). テーブルデータ(26,'20120402','20120515','A'). テーブルデータ(27,'20120402','20120409','A'). テーブルデータ(28,'20120402','20120527','A'). テーブルデータ(29,'20120402','20120501','A'). テーブルデータ(30,'20120402','20120514','A'). テーブルデータ(31,'20120402','20120514','A'). テーブルデータ(32,'20120403','20120502','A'). テーブルデータ(33,'20120403','20120430','A'). テーブルデータ(34,'20120403','20120416','A'). テーブルデータ(35,'20120403','20120419','A'). テーブルデータ(36,'20120403','20120504','A'). テーブルデータ(37,'20120403','20120425','A'). テーブルデータ(38,'20120403','20120412','A'). テーブルデータ(39,'20120403','20120506','A'). テーブルデータ(40,'20120403','20120424','A'). テーブルデータ(41,'20120403','20120601','A'). テーブルデータ(42,'20120403','20120517','A'). テーブルデータ(43,'20120403','20120510','A'). テーブルデータ(44,'20120403','20120511','A'). テーブルデータ(45,'20120403','20120517','A'). テーブルデータ(46,'20120403','20120508','A'). テーブルデータ(47,'20120403','20120503','A'). テーブルデータ(48,'20120403','20120526','A'). テーブルデータ(49,'20120403','20120519','A'). テーブルデータ(50,'20120403','20120504','A'). テーブルデータ(51,'20120404','20120530','A'). テーブルデータ(52,'20120404','20120507','A'). テーブルデータ(53,'20120404','20120406','A'). テーブルデータ(54,'20120404','20120524','A'). テーブルデータ(55,'20120404','20120420','A'). テーブルデータ(56,'20120404','20120405','A'). テーブルデータ(57,'20120404','20120519','A'). テーブルデータ(58,'20120404','20120519','A'). テーブルデータ(59,'20120404','20120518','A'). テーブルデータ(60,'20120404','20120501','A'). テーブルデータ(61,'20120404','20120530','A'). テーブルデータ(62,'20120404','20120409','A'). テーブルデータ(63,'20120404','20120520','A'). テーブルデータ(64,'20120404','20120413','A'). テーブルデータ(65,'20120404','20120417','A'). テーブルデータ(66,'20120404','20120421','A'). テーブルデータ(67,'20120404','20120428','A'). テーブルデータ(68,'20120404','20120419','A'). テーブルデータ(69,'20120404','20120516','A'). テーブルデータ(70,'20120404','20120519','A'). テーブルデータ(71,'20120404','20120418','A'). テーブルデータ(72,'20120405','20120419','A'). テーブルデータ(73,'20120405','20120519','A'). テーブルデータ(74,'20120405','20120408','A'). テーブルデータ(75,'20120405','20120525','A'). テーブルデータ(76,'20120405','20120412','A'). テーブルデータ(77,'20120405','20120523','A'). テーブルデータ(78,'20120405','20120511','A'). テーブルデータ(79,'20120405','20120513','A'). テーブルデータ(80,'20120405','20120413','A'). テーブルデータ(81,'20120405','20120429','A'). テーブルデータ(82,'20120405','20120408','A'). テーブルデータ(83,'20120405','20120416','A'). テーブルデータ(84,'20120405','20120419','A'). テーブルデータ(85,'20120405','20120424','A'). テーブルデータ(86,'20120405','20120417','A'). テーブルデータ(87,'20120405','20120405','A'). テーブルデータ(88,'20120405','20120531','A'). テーブルデータ(89,'20120405','20120523','A'). テーブルデータ(90,'20120405','20120424','A'). テーブルデータ(91,'20120405','20120527','A'). テーブルデータ(92,'20120405','20120521','A'). テーブルデータ(93,'20120405','20120411','A'). テーブルデータ(94,'20120405','20120529','A'). テーブルデータ(95,'20120405','20120603','A'). テーブルデータ(96,'20120405','20120420','A'). テーブルデータ(97,'20120405','20120415','A'). テーブルデータ(98,'20120405','20120419','A'). テーブルデータ(99,'20120405','20120602','A'). テーブルデータ(100,'20120406','20120427','A'). テーブルデータ(101,'20120406','20120423','A'). テーブルデータ(102,'20120406','20120408','A'). テーブルデータ(103,'20120406','20120602','A'). テーブルデータ(104,'20120406','20120418','A'). テーブルデータ(105,'20120406','20120528','A'). テーブルデータ(106,'20120406','20120601','A'). テーブルデータ(107,'20120406','20120407','A'). テーブルデータ(108,'20120406','20120426','A'). テーブルデータ(109,'20120406','20120502','A'). テーブルデータ(110,'20120406','20120407','A'). テーブルデータ(111,'20120406','20120521','A'). テーブルデータ(112,'20120406','20120505','A'). テーブルデータ(113,'20120406','20120410','A'). テーブルデータ(114,'20120406','20120604','A'). テーブルデータ(115,'20120406','20120516','A'). テーブルデータ(116,'20120406','20120415','A'). テーブルデータ(117,'20120406','20120527','A'). テーブルデータ(118,'20120407','20120603','A'). テーブルデータ(119,'20120407','20120418','A'). テーブルデータ(120,'20120407','20120428','A'). テーブルデータ(121,'20120407','20120512','A'). テーブルデータ(122,'20120407','20120416','A'). テーブルデータ(123,'20120407','20120414','A'). テーブルデータ(124,'20120407','20120504','A'). テーブルデータ(125,'20120407','20120423','A'). テーブルデータ(126,'20120408','20120511','A'). テーブルデータ(127,'20120408','20120414','A'). テーブルデータ(128,'20120408','20120413','A'). テーブルデータ(129,'20120408','20120524','A'). テーブルデータ(130,'20120408','20120501','A'). テーブルデータ(131,'20120408','20120606','A'). テーブルデータ(132,'20120408','20120522','A'). テーブルデータ(133,'20120408','20120506','A'). テーブルデータ(134,'20120408','20120529','A'). テーブルデータ(135,'20120408','20120510','A'). テーブルデータ(136,'20120408','20120507','A'). テーブルデータ(137,'20120408','20120411','A'). テーブルデータ(138,'20120408','20120606','A'). テーブルデータ(139,'20120408','20120508','A'). テーブルデータ(140,'20120408','20120526','A'). テーブルデータ(141,'20120408','20120506','A'). テーブルデータ(142,'20120408','20120513','A'). テーブルデータ(143,'20120408','20120518','A'). テーブルデータ(144,'20120409','20120515','A'). テーブルデータ(145,'20120409','20120502','A'). テーブルデータ(146,'20120409','20120517','A'). テーブルデータ(147,'20120409','20120504','A'). テーブルデータ(148,'20120409','20120505','A'). テーブルデータ(149,'20120409','20120530','A'). テーブルデータ(150,'20120409','20120410','A'). テーブルデータ(151,'20120409','20120514','A'). テーブルデータ(152,'20120409','20120607','A'). テーブルデータ(153,'20120409','20120507','A'). テーブルデータ(154,'20120410','20120418','A'). テーブルデータ(155,'20120410','20120411','A'). テーブルデータ(156,'20120410','20120530','A'). テーブルデータ(157,'20120410','20120423','A'). テーブルデータ(158,'20120410','20120520','A'). テーブルデータ(159,'20120410','20120424','A'). テーブルデータ(160,'20120410','20120414','A'). テーブルデータ(161,'20120410','20120504','A'). テーブルデータ(162,'20120410','20120514','A'). テーブルデータ(163,'20120410','20120527','A'). テーブルデータ(164,'20120410','20120605','A'). テーブルデータ(165,'20120410','20120413','A'). テーブルデータ(166,'20120410','20120531','A'). テーブルデータ(167,'20120410','20120527','A'). テーブルデータ(168,'20120410','20120505','A'). テーブルデータ(169,'20120411','20120427','A'). テーブルデータ(170,'20120411','20120602','A'). テーブルデータ(171,'20120411','20120422','A'). テーブルデータ(172,'20120411','20120428','A'). テーブルデータ(173,'20120411','20120509','A'). テーブルデータ(174,'20120411','20120516','A'). テーブルデータ(175,'20120411','20120528','A'). テーブルデータ(176,'20120411','20120604','A'). テーブルデータ(177,'20120411','20120412','A'). テーブルデータ(178,'20120411','20120519','A'). テーブルデータ(179,'20120412','20120511','A'). テーブルデータ(180,'20120412','20120519','A'). テーブルデータ(181,'20120412','20120427','A'). テーブルデータ(182,'20120412','20120425','A'). テーブルデータ(183,'20120412','20120520','A'). テーブルデータ(184,'20120412','20120420','A'). テーブルデータ(185,'20120412','20120415','A'). テーブルデータ(186,'20120412','20120602','A'). テーブルデータ(187,'20120412','20120530','A'). テーブルデータ(188,'20120412','20120421','A'). テーブルデータ(189,'20120412','20120607','A'). テーブルデータ(190,'20120412','20120416','A'). テーブルデータ(191,'20120412','20120525','A'). テーブルデータ(192,'20120412','20120525','A'). テーブルデータ(193,'20120412','20120604','A'). テーブルデータ(194,'20120412','20120520','A'). テーブルデータ(195,'20120412','20120508','A'). テーブルデータ(196,'20120412','20120522','A'). テーブルデータ(197,'20120412','20120416','A'). テーブルデータ(198,'20120412','20120609','A'). テーブルデータ(199,'20120412','20120530','A'). テーブルデータ(200,'20120412','20120530','A'). テーブルデータ(201,'20120412','20120421','A'). テーブルデータ(202,'20120412','20120608','A'). テーブルデータ(203,'20120412','20120429','A'). テーブルデータ(204,'20120412','20120518','A'). テーブルデータ(205,'20120413','20120416','A'). テーブルデータ(206,'20120413','20120513','A'). テーブルデータ(207,'20120413','20120506','A'). テーブルデータ(208,'20120413','20120602','A'). テーブルデータ(209,'20120413','20120611','A'). テーブルデータ(210,'20120413','20120604','A'). テーブルデータ(211,'20120413','20120418','A'). テーブルデータ(212,'20120413','20120417','A'). テーブルデータ(213,'20120413','20120513','A'). テーブルデータ(214,'20120413','20120418','A'). テーブルデータ(215,'20120413','20120611','A'). テーブルデータ(216,'20120413','20120427','A'). テーブルデータ(217,'20120413','20120529','A'). テーブルデータ(218,'20120413','20120422','A'). テーブルデータ(219,'20120413','20120415','A'). テーブルデータ(220,'20120414','20120528','A'). テーブルデータ(221,'20120414','20120521','A'). テーブルデータ(222,'20120414','20120511','A'). テーブルデータ(223,'20120414','20120429','A'). テーブルデータ(224,'20120414','20120418','A'). テーブルデータ(225,'20120414','20120422','A'). テーブルデータ(226,'20120414','20120425','A'). テーブルデータ(227,'20120414','20120416','A'). テーブルデータ(228,'20120414','20120601','A'). テーブルデータ(229,'20120414','20120612','A'). テーブルデータ(230,'20120414','20120417','A'). テーブルデータ(231,'20120414','20120530','A'). テーブルデータ(232,'20120414','20120422','A'). テーブルデータ(233,'20120415','20120507','A'). テーブルデータ(234,'20120415','20120426','A'). テーブルデータ(235,'20120415','20120425','A'). テーブルデータ(236,'20120415','20120530','A'). テーブルデータ(237,'20120415','20120416','A'). テーブルデータ(238,'20120415','20120416','A'). テーブルデータ(239,'20120415','20120515','A'). テーブルデータ(240,'20120415','20120612','A'). テーブルデータ(241,'20120415','20120420','A'). テーブルデータ(242,'20120415','20120415','A'). テーブルデータ(243,'20120415','20120610','A'). テーブルデータ(244,'20120416','20120422','A'). テーブルデータ(245,'20120416','20120528','A'). テーブルデータ(246,'20120416','20120421','A'). テーブルデータ(247,'20120416','20120424','A'). テーブルデータ(248,'20120416','20120502','A'). テーブルデータ(249,'20120417','20120525','A'). テーブルデータ(250,'20120417','20120531','A'). テーブルデータ(251,'20120417','20120613','A'). テーブルデータ(252,'20120417','20120529','A'). テーブルデータ(253,'20120417','20120531','A'). テーブルデータ(254,'20120417','20120417','A'). テーブルデータ(255,'20120417','20120523','A'). テーブルデータ(256,'20120417','20120519','A'). テーブルデータ(257,'20120417','20120615','A'). テーブルデータ(258,'20120417','20120526','A'). テーブルデータ(259,'20120417','20120427','A'). テーブルデータ(260,'20120417','20120425','A'). テーブルデータ(261,'20120417','20120428','A'). テーブルデータ(262,'20120418','20120429','A'). テーブルデータ(263,'20120418','20120509','A'). テーブルデータ(264,'20120418','20120428','A'). テーブルデータ(265,'20120418','20120501','A'). テーブルデータ(266,'20120419','20120529','A'). テーブルデータ(267,'20120419','20120422','A'). テーブルデータ(268,'20120419','20120508','A'). テーブルデータ(269,'20120419','20120530','A'). テーブルデータ(270,'20120419','20120617','A'). テーブルデータ(271,'20120419','20120505','A'). テーブルデータ(272,'20120419','20120528','A'). テーブルデータ(273,'20120419','20120522','A'). テーブルデータ(274,'20120419','20120502','A'). テーブルデータ(275,'20120419','20120606','A'). テーブルデータ(276,'20120419','20120608','A'). テーブルデータ(277,'20120419','20120613','A'). テーブルデータ(278,'20120419','20120515','A'). テーブルデータ(279,'20120419','20120515','A'). テーブルデータ(280,'20120419','20120602','A'). テーブルデータ(281,'20120420','20120430','A'). テーブルデータ(282,'20120421','20120527','A'). テーブルデータ(283,'20120421','20120602','A'). テーブルデータ(284,'20120421','20120527','A'). テーブルデータ(285,'20120421','20120428','A'). テーブルデータ(286,'20120421','20120605','A'). テーブルデータ(287,'20120421','20120527','A'). テーブルデータ(288,'20120421','20120510','A'). テーブルデータ(289,'20120421','20120509','A'). テーブルデータ(290,'20120421','20120607','A'). テーブルデータ(291,'20120421','20120523','A'). テーブルデータ(292,'20120421','20120519','A'). テーブルデータ(293,'20120421','20120612','A'). テーブルデータ(294,'20120421','20120530','A'). テーブルデータ(295,'20120421','20120430','A'). テーブルデータ(296,'20120421','20120616','A'). テーブルデータ(297,'20120422','20120603','A'). テーブルデータ(298,'20120422','20120608','A'). テーブルデータ(299,'20120422','20120428','A'). テーブルデータ(300,'20120422','20120513','A'). テーブルデータ(301,'20120422','20120505','A'). テーブルデータ(302,'20120422','20120504','A'). テーブルデータ(303,'20120422','20120423','A'). テーブルデータ(304,'20120422','20120616','A'). テーブルデータ(305,'20120422','20120620','A'). テーブルデータ(306,'20120422','20120511','A'). テーブルデータ(307,'20120422','20120513','A'). テーブルデータ(308,'20120422','20120605','A'). テーブルデータ(309,'20120422','20120511','A'). テーブルデータ(310,'20120422','20120523','A'). テーブルデータ(311,'20120422','20120512','A'). テーブルデータ(312,'20120422','20120608','A'). テーブルデータ(313,'20120422','20120427','A'). テーブルデータ(314,'20120422','20120609','A'). テーブルデータ(315,'20120422','20120608','A'). テーブルデータ(316,'20120422','20120611','A'). テーブルデータ(317,'20120422','20120516','A'). テーブルデータ(318,'20120423','20120423','A'). テーブルデータ(319,'20120423','20120427','A'). テーブルデータ(320,'20120423','20120515','A'). テーブルデータ(321,'20120423','20120522','A'). テーブルデータ(322,'20120423','20120618','A'). テーブルデータ(323,'20120423','20120424','A'). テーブルデータ(324,'20120423','20120523','A'). テーブルデータ(325,'20120423','20120606','A'). テーブルデータ(326,'20120423','20120614','A'). テーブルデータ(327,'20120423','20120505','A'). テーブルデータ(328,'20120423','20120525','A'). テーブルデータ(329,'20120423','20120612','A'). テーブルデータ(330,'20120423','20120518','A'). テーブルデータ(331,'20120423','20120607','A'). テーブルデータ(332,'20120423','20120425','A'). テーブルデータ(333,'20120423','20120512','A'). テーブルデータ(334,'20120423','20120602','A'). テーブルデータ(335,'20120423','20120425','A'). テーブルデータ(336,'20120423','20120531','A'). テーブルデータ(337,'20120423','20120615','A'). テーブルデータ(338,'20120423','20120531','A'). テーブルデータ(339,'20120423','20120612','A'). テーブルデータ(340,'20120423','20120517','A'). テーブルデータ(341,'20120423','20120612','A'). テーブルデータ(342,'20120423','20120522','A'). テーブルデータ(343,'20120423','20120514','A'). テーブルデータ(344,'20120423','20120601','A'). テーブルデータ(345,'20120423','20120509','A'). テーブルデータ(346,'20120423','20120505','A'). テーブルデータ(347,'20120424','20120508','A'). テーブルデータ(348,'20120424','20120428','A'). テーブルデータ(349,'20120424','20120622','A'). テーブルデータ(350,'20120424','20120523','A'). テーブルデータ(351,'20120424','20120527','A'). テーブルデータ(352,'20120424','20120619','A'). テーブルデータ(353,'20120424','20120524','A'). テーブルデータ(354,'20120424','20120618','A'). テーブルデータ(355,'20120424','20120603','A'). テーブルデータ(356,'20120424','20120516','A'). テーブルデータ(357,'20120424','20120622','A'). テーブルデータ(358,'20120424','20120428','A'). テーブルデータ(359,'20120424','20120507','A'). テーブルデータ(360,'20120424','20120519','A'). テーブルデータ(361,'20120424','20120604','A'). テーブルデータ(362,'20120424','20120501','A'). テーブルデータ(363,'20120424','20120607','A'). テーブルデータ(364,'20120424','20120507','A'). テーブルデータ(365,'20120424','20120425','A'). テーブルデータ(366,'20120424','20120508','A'). テーブルデータ(367,'20120424','20120430','A'). テーブルデータ(368,'20120424','20120602','A'). テーブルデータ(369,'20120424','20120428','A'). テーブルデータ(370,'20120424','20120516','A'). テーブルデータ(371,'20120424','20120516','A'). テーブルデータ(372,'20120424','20120520','A'). テーブルデータ(373,'20120425','20120426','A'). テーブルデータ(374,'20120425','20120606','A'). テーブルデータ(375,'20120425','20120612','A'). テーブルデータ(376,'20120425','20120612','A'). テーブルデータ(377,'20120425','20120613','A'). テーブルデータ(378,'20120425','20120616','A'). テーブルデータ(379,'20120425','20120612','A'). テーブルデータ(380,'20120425','20120513','A'). テーブルデータ(381,'20120425','20120513','A'). テーブルデータ(382,'20120425','20120531','A'). テーブルデータ(383,'20120425','20120612','A'). テーブルデータ(384,'20120425','20120508','A'). テーブルデータ(385,'20120425','20120503','A'). テーブルデータ(386,'20120425','20120428','A'). テーブルデータ(387,'20120425','20120508','A'). テーブルデータ(388,'20120426','20120504','A'). テーブルデータ(389,'20120426','20120526','A'). テーブルデータ(390,'20120426','20120619','A'). テーブルデータ(391,'20120426','20120503','A'). テーブルデータ(392,'20120426','20120502','A'). テーブルデータ(393,'20120426','20120504','A'). テーブルデータ(394,'20120426','20120505','A'). テーブルデータ(395,'20120426','20120516','A'). テーブルデータ(396,'20120426','20120502','A'). テーブルデータ(397,'20120426','20120613','A'). テーブルデータ(398,'20120426','20120513','A'). テーブルデータ(399,'20120426','20120525','A'). テーブルデータ(400,'20120426','20120506','A'). テーブルデータ(401,'20120426','20120608','A'). テーブルデータ(402,'20120427','20120430','A'). テーブルデータ(403,'20120427','20120514','A'). テーブルデータ(404,'20120427','20120619','A'). テーブルデータ(405,'20120427','20120618','A'). テーブルデータ(406,'20120427','20120503','A'). テーブルデータ(407,'20120427','20120611','A'). テーブルデータ(408,'20120427','20120529','A'). テーブルデータ(409,'20120427','20120513','A'). テーブルデータ(410,'20120427','20120621','A'). テーブルデータ(411,'20120427','20120505','A'). テーブルデータ(412,'20120427','20120623','A'). テーブルデータ(413,'20120427','20120506','A'). テーブルデータ(414,'20120427','20120513','A'). テーブルデータ(415,'20120427','20120427','A'). テーブルデータ(416,'20120428','20120519','A'). テーブルデータ(417,'20120428','20120428','A'). テーブルデータ(418,'20120428','20120611','A'). テーブルデータ(419,'20120428','20120506','A'). テーブルデータ(420,'20120428','20120505','A'). テーブルデータ(421,'20120428','20120617','A'). テーブルデータ(422,'20120428','20120506','A'). テーブルデータ(423,'20120428','20120514','A'). テーブルデータ(424,'20120428','20120430','A'). テーブルデータ(425,'20120428','20120512','A'). テーブルデータ(426,'20120428','20120624','A'). テーブルデータ(427,'20120428','20120517','A'). テーブルデータ(428,'20120428','20120610','A'). テーブルデータ(429,'20120428','20120626','A'). テーブルデータ(430,'20120428','20120430','A'). テーブルデータ(431,'20120429','20120502','A'). テーブルデータ(432,'20120429','20120519','A'). テーブルデータ(433,'20120429','20120609','A'). テーブルデータ(434,'20120429','20120615','A'). テーブルデータ(435,'20120429','20120517','A'). テーブルデータ(436,'20120429','20120518','A'). テーブルデータ(437,'20120429','20120510','A'). テーブルデータ(438,'20120429','20120603','A'). テーブルデータ(439,'20120429','20120513','A'). テーブルデータ(440,'20120429','20120518','A'). テーブルデータ(441,'20120429','20120531','A'). テーブルデータ(442,'20120429','20120514','A'). テーブルデータ(443,'20120429','20120526','A'). テーブルデータ(444,'20120429','20120523','A'). テーブルデータ(445,'20120429','20120528','A'). テーブルデータ(446,'20120429','20120617','A'). テーブルデータ(447,'20120429','20120523','A'). テーブルデータ(448,'20120429','20120504','A'). テーブルデータ(449,'20120429','20120617','A'). テーブルデータ(450,'20120430','20120624','A'). テーブルデータ(451,'20120430','20120626','A'). テーブルデータ(452,'20120430','20120609','A'). テーブルデータ(453,'20120430','20120627','A'). テーブルデータ(454,'20120430','20120511','A'). テーブルデータ(455,'20120430','20120529','A'). テーブルデータ(456,'20120430','20120509','A'). テーブルデータ(457,'20120430','20120616','A'). テーブルデータ(458,'20120430','20120528','A'). テーブルデータ(459,'20120430','20120512','A'). テーブルデータ(460,'20120430','20120604','A'). テーブルデータ(461,'20120430','20120523','A'). テーブルデータ(462,'20120430','20120524','A'). テーブルデータ(463,'20120430','20120509','A'). テーブルデータ(464,'20120430','20120510','A'). テーブルデータ(465,'20120430','20120611','A'). テーブルデータ(466,'20120430','20120520','A'). テーブルデータ(467,'20120430','20120521','A'). テーブルデータ(468,'20120430','20120509','A'). テーブルデータ(469,'20120430','20120526','A'). テーブルデータ(470,'20120430','20120601','A'). テーブルデータ(471,'20120430','20120610','A'). テーブルデータ(472,'20120430','20120611','A'). テーブルデータ(473,'20120430','20120430','A'). テーブルデータ(474,'20120501','20120504','A'). テーブルデータ(475,'20120501','20120611','A'). テーブルデータ(476,'20120501','20120522','A'). テーブルデータ(477,'20120501','20120510','A'). テーブルデータ(478,'20120501','20120531','A'). テーブルデータ(479,'20120501','20120615','A'). テーブルデータ(480,'20120501','20120626','A'). テーブルデータ(481,'20120501','20120528','A'). テーブルデータ(482,'20120501','20120518','A'). テーブルデータ(483,'20120501','20120624','A'). テーブルデータ(484,'20120501','20120531','A'). テーブルデータ(485,'20120501','20120616','A'). テーブルデータ(486,'20120501','20120505','A'). テーブルデータ(487,'20120501','20120518','A'). テーブルデータ(488,'20120501','20120515','A'). テーブルデータ(489,'20120501','20120509','A'). テーブルデータ(490,'20120501','20120615','A'). テーブルデータ(491,'20120501','20120608','A'). テーブルデータ(492,'20120501','20120602','A'). テーブルデータ(493,'20120501','20120616','A'). テーブルデータ(494,'20120501','20120610','A'). テーブルデータ(495,'20120501','20120507','A'). テーブルデータ(496,'20120501','20120507','A'). テーブルデータ(497,'20120501','20120624','A'). テーブルデータ(498,'20120501','20120517','A'). テーブルデータ(499,'20120501','20120602','A'). テーブルデータ(500,'20120501','20120519','A'). テーブルデータ(501,'20120501','20120619','A'). テーブルデータ(502,'20120502','20120512','A'). テーブルデータ(503,'20120502','20120618','A'). テーブルデータ(504,'20120502','20120512','A'). テーブルデータ(505,'20120502','20120622','A'). テーブルデータ(506,'20120502','20120502','A'). テーブルデータ(507,'20120502','20120513','A'). テーブルデータ(508,'20120502','20120515','A'). テーブルデータ(509,'20120503','20120510','A'). テーブルデータ(510,'20120503','20120604','A'). テーブルデータ(511,'20120503','20120618','A'). テーブルデータ(512,'20120503','20120626','A'). テーブルデータ(513,'20120503','20120627','A'). テーブルデータ(514,'20120503','20120604','A'). テーブルデータ(515,'20120503','20120622','A'). テーブルデータ(516,'20120503','20120515','A'). テーブルデータ(517,'20120504','20120623','A'). テーブルデータ(518,'20120504','20120622','A'). テーブルデータ(519,'20120504','20120513','A'). テーブルデータ(520,'20120504','20120518','A'). テーブルデータ(521,'20120504','20120608','A'). テーブルデータ(522,'20120504','20120614','A'). テーブルデータ(523,'20120504','20120524','A'). テーブルデータ(524,'20120504','20120606','A'). テーブルデータ(525,'20120504','20120531','A'). テーブルデータ(526,'20120504','20120601','A'). テーブルデータ(527,'20120505','20120620','A'). テーブルデータ(528,'20120505','20120515','A'). テーブルデータ(529,'20120505','20120509','A'). テーブルデータ(530,'20120505','20120630','A'). テーブルデータ(531,'20120505','20120701','A'). テーブルデータ(532,'20120505','20120511','A'). テーブルデータ(533,'20120505','20120614','A'). テーブルデータ(534,'20120505','20120623','A'). テーブルデータ(535,'20120505','20120522','A'). テーブルデータ(536,'20120505','20120619','A'). テーブルデータ(537,'20120505','20120524','A'). テーブルデータ(538,'20120505','20120522','A'). テーブルデータ(539,'20120505','20120523','A'). テーブルデータ(540,'20120505','20120510','A'). テーブルデータ(541,'20120505','20120508','A'). テーブルデータ(542,'20120505','20120518','A'). テーブルデータ(543,'20120505','20120612','A'). テーブルデータ(544,'20120505','20120627','A'). テーブルデータ(545,'20120505','20120522','A'). テーブルデータ(546,'20120505','20120514','A'). テーブルデータ(547,'20120505','20120617','A'). テーブルデータ(548,'20120505','20120512','A'). テーブルデータ(549,'20120505','20120523','A'). テーブルデータ(550,'20120505','20120701','A'). テーブルデータ(551,'20120505','20120608','A'). テーブルデータ(552,'20120505','20120625','A'). テーブルデータ(553,'20120505','20120514','A'). テーブルデータ(554,'20120505','20120505','A'). テーブルデータ(555,'20120505','20120524','A'). テーブルデータ(556,'20120506','20120703','A'). テーブルデータ(557,'20120506','20120511','A'). テーブルデータ(558,'20120506','20120623','A'). テーブルデータ(559,'20120506','20120629','A'). テーブルデータ(560,'20120506','20120628','A'). テーブルデータ(561,'20120506','20120612','A'). テーブルデータ(562,'20120506','20120507','A'). テーブルデータ(563,'20120506','20120608','A'). テーブルデータ(564,'20120506','20120524','A'). テーブルデータ(565,'20120507','20120526','A'). テーブルデータ(566,'20120507','20120613','A'). テーブルデータ(567,'20120507','20120526','A'). テーブルデータ(568,'20120507','20120605','A'). テーブルデータ(569,'20120507','20120619','A'). テーブルデータ(570,'20120507','20120529','A'). テーブルデータ(571,'20120507','20120610','A'). テーブルデータ(572,'20120507','20120520','A'). テーブルデータ(573,'20120507','20120514','A'). テーブルデータ(574,'20120507','20120627','A'). テーブルデータ(575,'20120507','20120529','A'). テーブルデータ(576,'20120508','20120627','A'). テーブルデータ(577,'20120508','20120609','A'). テーブルデータ(578,'20120508','20120608','A'). テーブルデータ(579,'20120508','20120525','A'). テーブルデータ(580,'20120508','20120523','A'). テーブルデータ(581,'20120508','20120618','A'). テーブルデータ(582,'20120508','20120525','A'). テーブルデータ(583,'20120508','20120611','A'). テーブルデータ(584,'20120508','20120519','A'). テーブルデータ(585,'20120508','20120515','A'). テーブルデータ(586,'20120508','20120608','A'). テーブルデータ(587,'20120508','20120628','A'). テーブルデータ(588,'20120508','20120509','A'). テーブルデータ(589,'20120509','20120529','A'). テーブルデータ(590,'20120509','20120702','A'). テーブルデータ(591,'20120509','20120628','A'). テーブルデータ(592,'20120509','20120616','A'). テーブルデータ(593,'20120509','20120514','A'). テーブルデータ(594,'20120509','20120510','A'). テーブルデータ(595,'20120509','20120525','A'). テーブルデータ(596,'20120509','20120525','A'). テーブルデータ(597,'20120509','20120531','A'). テーブルデータ(598,'20120509','20120629','A'). テーブルデータ(599,'20120509','20120617','A'). テーブルデータ(600,'20120509','20120704','A'). テーブルデータ(601,'20120509','20120513','A'). テーブルデータ(602,'20120509','20120616','A'). テーブルデータ(603,'20120509','20120618','A'). テーブルデータ(604,'20120509','20120527','A'). テーブルデータ(605,'20120509','20120530','A'). テーブルデータ(606,'20120509','20120608','A'). テーブルデータ(607,'20120510','20120701','A'). テーブルデータ(608,'20120510','20120618','A'). テーブルデータ(609,'20120510','20120706','A'). テーブルデータ(610,'20120510','20120604','A'). テーブルデータ(611,'20120510','20120705','A'). テーブルデータ(612,'20120510','20120603','A'). テーブルデータ(613,'20120510','20120615','A'). テーブルデータ(614,'20120510','20120513','A'). テーブルデータ(615,'20120510','20120626','A'). テーブルデータ(616,'20120510','20120529','A'). テーブルデータ(617,'20120510','20120706','A'). テーブルデータ(618,'20120510','20120514','A'). テーブルデータ(619,'20120510','20120618','A'). テーブルデータ(620,'20120511','20120627','A'). テーブルデータ(621,'20120511','20120521','A'). テーブルデータ(622,'20120511','20120706','A'). テーブルデータ(623,'20120511','20120620','A'). テーブルデータ(624,'20120511','20120529','A'). テーブルデータ(625,'20120511','20120516','A'). テーブルデータ(626,'20120511','20120514','A'). テーブルデータ(627,'20120511','20120520','A'). テーブルデータ(628,'20120511','20120624','A'). テーブルデータ(629,'20120511','20120701','A'). テーブルデータ(630,'20120511','20120516','A'). テーブルデータ(631,'20120511','20120525','A'). テーブルデータ(632,'20120511','20120611','A'). テーブルデータ(633,'20120511','20120526','A'). テーブルデータ(634,'20120511','20120615','A'). テーブルデータ(635,'20120511','20120704','A'). テーブルデータ(636,'20120511','20120629','A'). テーブルデータ(637,'20120511','20120608','A'). テーブルデータ(638,'20120511','20120613','A'). テーブルデータ(639,'20120511','20120618','A'). テーブルデータ(640,'20120511','20120625','A'). テーブルデータ(641,'20120511','20120602','A'). テーブルデータ(642,'20120512','20120603','A'). テーブルデータ(643,'20120512','20120529','A'). テーブルデータ(644,'20120512','20120701','A'). テーブルデータ(645,'20120513','20120527','A'). テーブルデータ(646,'20120513','20120628','A'). テーブルデータ(647,'20120513','20120526','A'). テーブルデータ(648,'20120513','20120519','A'). テーブルデータ(649,'20120514','20120606','A'). テーブルデータ(650,'20120514','20120707','A'). テーブルデータ(651,'20120514','20120528','A'). テーブルデータ(652,'20120514','20120616','A'). テーブルデータ(653,'20120515','20120601','A'). テーブルデータ(654,'20120515','20120626','A'). テーブルデータ(655,'20120515','20120619','A'). テーブルデータ(656,'20120515','20120523','A'). テーブルデータ(657,'20120515','20120623','A'). テーブルデータ(658,'20120515','20120704','A'). テーブルデータ(659,'20120515','20120616','A'). テーブルデータ(660,'20120515','20120708','A'). テーブルデータ(661,'20120515','20120601','A'). テーブルデータ(662,'20120515','20120610','A'). テーブルデータ(663,'20120515','20120619','A'). テーブルデータ(664,'20120515','20120621','A'). テーブルデータ(665,'20120515','20120705','A'). テーブルデータ(666,'20120515','20120528','A'). テーブルデータ(667,'20120515','20120607','A'). テーブルデータ(668,'20120515','20120528','A'). テーブルデータ(669,'20120515','20120523','A'). テーブルデータ(670,'20120515','20120629','A'). テーブルデータ(671,'20120515','20120615','A'). テーブルデータ(672,'20120515','20120704','A'). テーブルデータ(673,'20120515','20120602','A'). テーブルデータ(674,'20120515','20120621','A'). テーブルデータ(675,'20120515','20120620','A'). テーブルデータ(676,'20120515','20120607','A'). テーブルデータ(677,'20120515','20120619','A'). テーブルデータ(678,'20120515','20120525','A'). テーブルデータ(679,'20120515','20120622','A'). テーブルデータ(680,'20120515','20120614','A'). テーブルデータ(681,'20120515','20120608','A'). テーブルデータ(682,'20120515','20120526','A'). テーブルデータ(683,'20120516','20120618','A'). テーブルデータ(684,'20120516','20120630','A'). テーブルデータ(685,'20120516','20120704','A'). テーブルデータ(686,'20120516','20120618','A'). テーブルデータ(687,'20120516','20120609','A'). テーブルデータ(688,'20120516','20120616','A'). テーブルデータ(689,'20120516','20120521','A'). テーブルデータ(690,'20120516','20120526','A'). テーブルデータ(691,'20120516','20120703','A'). テーブルデータ(692,'20120516','20120608','A'). テーブルデータ(693,'20120516','20120630','A'). テーブルデータ(694,'20120516','20120611','A'). テーブルデータ(695,'20120516','20120531','A'). テーブルデータ(696,'20120516','20120714','A'). テーブルデータ(697,'20120516','20120704','A'). テーブルデータ(698,'20120516','20120605','A'). テーブルデータ(699,'20120516','20120523','A'). テーブルデータ(700,'20120516','20120611','A'). テーブルデータ(701,'20120516','20120628','A'). テーブルデータ(702,'20120516','20120712','A'). テーブルデータ(703,'20120516','20120621','A'). テーブルデータ(704,'20120516','20120606','A'). テーブルデータ(705,'20120517','20120517','A'). テーブルデータ(706,'20120517','20120712','A'). テーブルデータ(707,'20120517','20120621','A'). テーブルデータ(708,'20120517','20120616','A'). テーブルデータ(709,'20120517','20120604','A'). テーブルデータ(710,'20120517','20120707','A'). テーブルデータ(711,'20120517','20120628','A'). テーブルデータ(712,'20120517','20120618','A'). テーブルデータ(713,'20120517','20120602','A'). テーブルデータ(714,'20120517','20120605','A'). テーブルデータ(715,'20120517','20120607','A'). テーブルデータ(716,'20120517','20120706','A'). テーブルデータ(717,'20120517','20120630','A'). テーブルデータ(718,'20120517','20120708','A'). テーブルデータ(719,'20120517','20120703','A'). テーブルデータ(720,'20120517','20120710','A'). テーブルデータ(721,'20120517','20120626','A'). テーブルデータ(722,'20120517','20120520','A'). テーブルデータ(723,'20120517','20120618','A'). テーブルデータ(724,'20120517','20120714','A'). テーブルデータ(725,'20120517','20120527','A'). テーブルデータ(726,'20120517','20120609','A'). テーブルデータ(727,'20120517','20120703','A'). テーブルデータ(728,'20120517','20120616','A'). テーブルデータ(729,'20120517','20120616','A'). テーブルデータ(730,'20120517','20120530','A'). テーブルデータ(731,'20120518','20120606','A'). テーブルデータ(732,'20120518','20120629','A'). テーブルデータ(733,'20120518','20120614','A'). テーブルデータ(734,'20120518','20120701','A'). テーブルデータ(735,'20120518','20120629','A'). テーブルデータ(736,'20120518','20120602','A'). テーブルデータ(737,'20120518','20120530','A'). テーブルデータ(738,'20120518','20120522','A'). テーブルデータ(739,'20120518','20120621','A'). テーブルデータ(740,'20120518','20120521','A'). テーブルデータ(741,'20120518','20120625','A'). テーブルデータ(742,'20120518','20120524','A'). テーブルデータ(743,'20120518','20120607','A'). テーブルデータ(744,'20120518','20120715','A'). テーブルデータ(745,'20120518','20120606','A'). テーブルデータ(746,'20120519','20120630','A'). テーブルデータ(747,'20120519','20120522','A'). テーブルデータ(748,'20120519','20120629','A'). テーブルデータ(749,'20120520','20120702','A'). テーブルデータ(750,'20120520','20120703','A'). テーブルデータ(751,'20120520','20120711','A'). テーブルデータ(752,'20120520','20120701','A'). テーブルデータ(753,'20120520','20120713','A'). テーブルデータ(754,'20120520','20120604','A'). テーブルデータ(755,'20120520','20120610','A'). テーブルデータ(756,'20120520','20120606','A'). テーブルデータ(757,'20120520','20120704','A'). テーブルデータ(758,'20120520','20120616','A'). テーブルデータ(759,'20120520','20120620','A'). テーブルデータ(760,'20120520','20120715','A'). テーブルデータ(761,'20120520','20120529','A'). テーブルデータ(762,'20120520','20120717','A'). テーブルデータ(763,'20120520','20120630','A'). テーブルデータ(764,'20120520','20120702','A'). テーブルデータ(765,'20120520','20120602','A'). テーブルデータ(766,'20120520','20120712','A'). テーブルデータ(767,'20120520','20120706','A'). テーブルデータ(768,'20120520','20120628','A'). テーブルデータ(769,'20120520','20120707','A'). テーブルデータ(770,'20120520','20120615','A'). テーブルデータ(771,'20120520','20120626','A'). テーブルデータ(772,'20120520','20120520','A'). テーブルデータ(773,'20120520','20120613','A'). テーブルデータ(774,'20120520','20120707','A'). テーブルデータ(775,'20120520','20120713','A'). テーブルデータ(776,'20120520','20120717','A'). テーブルデータ(777,'20120520','20120710','A'). テーブルデータ(778,'20120521','20120608','A'). テーブルデータ(779,'20120521','20120625','A'). テーブルデータ(780,'20120521','20120602','A'). テーブルデータ(781,'20120521','20120601','A'). テーブルデータ(782,'20120521','20120530','A'). テーブルデータ(783,'20120521','20120719','A'). テーブルデータ(784,'20120521','20120616','A'). テーブルデータ(785,'20120522','20120607','A'). テーブルデータ(786,'20120523','20120711','A'). テーブルデータ(787,'20120523','20120701','A'). テーブルデータ(788,'20120523','20120523','A'). テーブルデータ(789,'20120523','20120720','A'). テーブルデータ(790,'20120523','20120621','A'). テーブルデータ(791,'20120524','20120704','A'). テーブルデータ(792,'20120524','20120627','A'). テーブルデータ(793,'20120524','20120611','A'). テーブルデータ(794,'20120524','20120622','A'). テーブルデータ(795,'20120525','20120601','A'). テーブルデータ(796,'20120525','20120711','A'). テーブルデータ(797,'20120525','20120707','A'). テーブルデータ(798,'20120525','20120601','A'). テーブルデータ(799,'20120525','20120605','A'). テーブルデータ(800,'20120525','20120626','A'). テーブルデータ(801,'20120525','20120527','A'). テーブルデータ(802,'20120526','20120610','A'). テーブルデータ(803,'20120526','20120625','A'). テーブルデータ(804,'20120527','20120716','A'). テーブルデータ(805,'20120527','20120630','A'). テーブルデータ(806,'20120527','20120626','A'). テーブルデータ(807,'20120527','20120717','A'). テーブルデータ(808,'20120527','20120629','A'). テーブルデータ(809,'20120527','20120723','A'). テーブルデータ(810,'20120527','20120610','A'). テーブルデータ(811,'20120527','20120707','A'). テーブルデータ(812,'20120527','20120528','A'). テーブルデータ(813,'20120527','20120530','A'). テーブルデータ(814,'20120527','20120616','A'). テーブルデータ(815,'20120527','20120719','A'). テーブルデータ(816,'20120527','20120529','A'). テーブルデータ(817,'20120527','20120707','A'). テーブルデータ(818,'20120527','20120623','A'). テーブルデータ(819,'20120527','20120701','A'). テーブルデータ(820,'20120527','20120612','A'). テーブルデータ(821,'20120527','20120711','A'). テーブルデータ(822,'20120527','20120531','A'). テーブルデータ(823,'20120527','20120618','A'). テーブルデータ(824,'20120528','20120718','A'). テーブルデータ(825,'20120528','20120724','A'). テーブルデータ(826,'20120528','20120719','A'). テーブルデータ(827,'20120528','20120721','A'). テーブルデータ(828,'20120528','20120618','A'). テーブルデータ(829,'20120528','20120713','A'). テーブルデータ(830,'20120528','20120722','A'). テーブルデータ(831,'20120528','20120704','A'). テーブルデータ(832,'20120528','20120605','A'). テーブルデータ(833,'20120528','20120612','A'). テーブルデータ(834,'20120528','20120616','A'). テーブルデータ(835,'20120528','20120709','A'). テーブルデータ(836,'20120528','20120704','A'). テーブルデータ(837,'20120528','20120531','A'). テーブルデータ(838,'20120528','20120613','A'). テーブルデータ(839,'20120528','20120701','A'). テーブルデータ(840,'20120528','20120614','A'). テーブルデータ(841,'20120528','20120716','A'). テーブルデータ(842,'20120528','20120624','A'). テーブルデータ(843,'20120528','20120609','A'). テーブルデータ(844,'20120528','20120530','A'). テーブルデータ(845,'20120528','20120618','A'). テーブルデータ(846,'20120528','20120603','A'). テーブルデータ(847,'20120529','20120708','A'). テーブルデータ(848,'20120529','20120710','A'). テーブルデータ(849,'20120529','20120719','A'). テーブルデータ(850,'20120529','20120623','A'). テーブルデータ(851,'20120529','20120714','A'). テーブルデータ(852,'20120529','20120603','A'). テーブルデータ(853,'20120529','20120608','A'). テーブルデータ(854,'20120529','20120628','A'). テーブルデータ(855,'20120529','20120601','A'). テーブルデータ(856,'20120529','20120722','A'). テーブルデータ(857,'20120529','20120614','A'). テーブルデータ(858,'20120529','20120614','A'). テーブルデータ(859,'20120529','20120708','A'). テーブルデータ(860,'20120529','20120610','A'). テーブルデータ(861,'20120530','20120717','A'). テーブルデータ(862,'20120530','20120618','A'). テーブルデータ(863,'20120530','20120604','A'). テーブルデータ(864,'20120530','20120629','A'). テーブルデータ(865,'20120530','20120725','A'). テーブルデータ(866,'20120530','20120530','A'). テーブルデータ(867,'20120530','20120707','A'). テーブルデータ(868,'20120530','20120622','A'). テーブルデータ(869,'20120530','20120616','A'). テーブルデータ(870,'20120530','20120627','A'). テーブルデータ(871,'20120530','20120711','A'). テーブルデータ(872,'20120530','20120620','A'). テーブルデータ(873,'20120530','20120629','A'). テーブルデータ(874,'20120530','20120724','A'). テーブルデータ(875,'20120530','20120627','A'). テーブルデータ(876,'20120530','20120604','A'). テーブルデータ(877,'20120531','20120610','A'). テーブルデータ(878,'20120531','20120727','A'). テーブルデータ(879,'20120531','20120723','A'). テーブルデータ(880,'20120531','20120718','A'). テーブルデータ(881,'20120531','20120602','A'). テーブルデータ(882,'20120531','20120603','A'). テーブルデータ(883,'20120601','20120728','A'). テーブルデータ(884,'20120601','20120728','A'). テーブルデータ(885,'20120601','20120628','A'). テーブルデータ(886,'20120601','20120607','A'). テーブルデータ(887,'20120601','20120630','A'). テーブルデータ(888,'20120601','20120702','A'). テーブルデータ(889,'20120601','20120722','A'). テーブルデータ(890,'20120601','20120610','A'). テーブルデータ(891,'20120601','20120721','A'). テーブルデータ(892,'20120601','20120719','A'). テーブルデータ(893,'20120601','20120710','A'). テーブルデータ(894,'20120602','20120720','A'). テーブルデータ(895,'20120602','20120612','A'). テーブルデータ(896,'20120602','20120725','A'). テーブルデータ(897,'20120602','20120729','A'). テーブルデータ(898,'20120602','20120702','A'). テーブルデータ(899,'20120602','20120708','A'). テーブルデータ(900,'20120602','20120621','A'). テーブルデータ(901,'20120602','20120724','A'). テーブルデータ(902,'20120602','20120703','A'). テーブルデータ(903,'20120603','20120730','A'). テーブルデータ(904,'20120603','20120801','A'). テーブルデータ(905,'20120603','20120730','A'). テーブルデータ(906,'20120603','20120719','A'). テーブルデータ(907,'20120603','20120725','A'). テーブルデータ(908,'20120603','20120710','A'). テーブルデータ(909,'20120603','20120714','A'). テーブルデータ(910,'20120603','20120728','A'). テーブルデータ(911,'20120603','20120721','A'). テーブルデータ(912,'20120603','20120711','A'). テーブルデータ(913,'20120603','20120717','A'). テーブルデータ(914,'20120603','20120618','A'). テーブルデータ(915,'20120603','20120709','A'). テーブルデータ(916,'20120603','20120608','A'). テーブルデータ(917,'20120603','20120719','A'). テーブルデータ(918,'20120603','20120701','A'). テーブルデータ(919,'20120603','20120617','A'). テーブルデータ(920,'20120603','20120701','A'). テーブルデータ(921,'20120604','20120727','A'). テーブルデータ(922,'20120604','20120801','A'). テーブルデータ(923,'20120604','20120731','A'). テーブルデータ(924,'20120604','20120729','A'). テーブルデータ(925,'20120604','20120726','A'). テーブルデータ(926,'20120604','20120728','A'). テーブルデータ(927,'20120604','20120629','A'). テーブルデータ(928,'20120604','20120624','A'). テーブルデータ(929,'20120604','20120609','A'). テーブルデータ(930,'20120605','20120718','A'). テーブルデータ(931,'20120605','20120727','A'). テーブルデータ(932,'20120605','20120612','A'). テーブルデータ(933,'20120605','20120717','A'). テーブルデータ(934,'20120605','20120716','A'). テーブルデータ(935,'20120605','20120728','A'). テーブルデータ(936,'20120605','20120709','A'). テーブルデータ(937,'20120605','20120624','A'). テーブルデータ(938,'20120605','20120709','A'). テーブルデータ(939,'20120605','20120626','A'). テーブルデータ(940,'20120605','20120803','A'). テーブルデータ(941,'20120605','20120610','A'). テーブルデータ(942,'20120605','20120801','A'). テーブルデータ(943,'20120605','20120619','A'). テーブルデータ(944,'20120605','20120716','A'). テーブルデータ(945,'20120605','20120607','A'). テーブルデータ(946,'20120605','20120727','A'). テーブルデータ(947,'20120605','20120606','A'). テーブルデータ(948,'20120606','20120618','A'). テーブルデータ(949,'20120606','20120616','A'). テーブルデータ(950,'20120606','20120608','A'). テーブルデータ(951,'20120606','20120608','A'). テーブルデータ(952,'20120606','20120804','A'). テーブルデータ(953,'20120606','20120802','A'). テーブルデータ(954,'20120606','20120730','A'). テーブルデータ(955,'20120606','20120729','A'). テーブルデータ(956,'20120606','20120621','A'). テーブルデータ(957,'20120606','20120612','A'). テーブルデータ(958,'20120606','20120727','A'). テーブルデータ(959,'20120606','20120630','A'). テーブルデータ(960,'20120606','20120726','A'). テーブルデータ(961,'20120606','20120719','A'). テーブルデータ(962,'20120606','20120707','A'). テーブルデータ(963,'20120606','20120708','A'). テーブルデータ(964,'20120606','20120623','A'). テーブルデータ(965,'20120607','20120805','A'). テーブルデータ(966,'20120607','20120705','A'). テーブルデータ(967,'20120607','20120728','A'). テーブルデータ(968,'20120607','20120627','A'). テーブルデータ(969,'20120607','20120704','A'). テーブルデータ(970,'20120607','20120802','A'). テーブルデータ(971,'20120607','20120617','A'). テーブルデータ(972,'20120607','20120718','A'). テーブルデータ(973,'20120607','20120707','A'). テーブルデータ(974,'20120607','20120619','A'). テーブルデータ(975,'20120607','20120702','A'). テーブルデータ(976,'20120607','20120708','A'). テーブルデータ(977,'20120607','20120706','A'). テーブルデータ(978,'20120607','20120714','A'). テーブルデータ(979,'20120607','20120718','A'). テーブルデータ(980,'20120607','20120630','A'). テーブルデータ(981,'20120607','20120708','A'). テーブルデータ(982,'20120607','20120709','A'). テーブルデータ(983,'20120608','20120704','A'). テーブルデータ(984,'20120608','20120626','A'). テーブルデータ(985,'20120608','20120705','A'). テーブルデータ(986,'20120608','20120702','A'). テーブルデータ(987,'20120608','20120617','A'). テーブルデータ(988,'20120608','20120730','A'). テーブルデータ(989,'20120608','20120622','A'). テーブルデータ(990,'20120608','20120722','A'). テーブルデータ(991,'20120608','20120623','A'). テーブルデータ(992,'20120608','20120717','A'). テーブルデータ(993,'20120608','20120609','A'). テーブルデータ(994,'20120608','20120710','A'). テーブルデータ(995,'20120608','20120716','A'). テーブルデータ(996,'20120608','20120707','A'). テーブルデータ(997,'20120608','20120624','A'). テーブルデータ(998,'20120608','20120728','A'). テーブルデータ(999,'20120608','20120803','A'). テーブルデータ(1000,'20120608','20120612','A'). テーブルデータ(1001,'20120608','20120608','A'). テーブルデータ(1002,'20120608','20120707','A'). テーブルデータ(1003,'20120608','20120712','A'). テーブルデータ(1004,'20120609','20120802','A'). テーブルデータ(1005,'20120609','20120615','A'). テーブルデータ(1006,'20120609','20120705','A'). テーブルデータ(1007,'20120609','20120702','A'). テーブルデータ(1008,'20120609','20120718','A'). テーブルデータ(1009,'20120609','20120728','A'). テーブルデータ(1010,'20120610','20120622','A'). テーブルデータ(1011,'20120610','20120611','A'). テーブルデータ(1012,'20120610','20120623','A'). テーブルデータ(1013,'20120610','20120710','A'). テーブルデータ(1014,'20120610','20120709','A'). テーブルデータ(1015,'20120610','20120709','A'). テーブルデータ(1016,'20120610','20120711','A'). テーブルデータ(1017,'20120610','20120623','A'). テーブルデータ(1018,'20120610','20120724','A'). テーブルデータ(1019,'20120610','20120625','A'). テーブルデータ(1020,'20120610','20120708','A'). テーブルデータ(1021,'20120610','20120625','A'). テーブルデータ(1022,'20120610','20120627','A'). テーブルデータ(1023,'20120610','20120802','A'). テーブルデータ(1024,'20120610','20120802','A'). テーブルデータ(1025,'20120610','20120718','A'). テーブルデータ(1026,'20120610','20120619','A'). テーブルデータ(1027,'20120610','20120715','A'). テーブルデータ(1028,'20120610','20120715','A'). テーブルデータ(1029,'20120610','20120623','A'). テーブルデータ(1030,'20120610','20120708','A'). テーブルデータ(1031,'20120610','20120805','A'). テーブルデータ(1032,'20120610','20120720','A'). テーブルデータ(1033,'20120610','20120713','A'). テーブルデータ(1034,'20120610','20120723','A'). テーブルデータ(1035,'20120610','20120726','A'). テーブルデータ(1036,'20120611','20120808','A'). テーブルデータ(1037,'20120611','20120628','A'). テーブルデータ(1038,'20120611','20120721','A'). テーブルデータ(1039,'20120611','20120726','A'). テーブルデータ(1040,'20120611','20120702','A'). テーブルデータ(1041,'20120611','20120722','A'). テーブルデータ(1042,'20120611','20120731','A'). テーブルデータ(1043,'20120611','20120724','A'). テーブルデータ(1044,'20120611','20120621','A'). テーブルデータ(1045,'20120611','20120701','A'). テーブルデータ(1046,'20120611','20120625','A'). テーブルデータ(1047,'20120611','20120626','A'). テーブルデータ(1048,'20120611','20120615','A'). テーブルデータ(1049,'20120611','20120703','A'). テーブルデータ(1050,'20120611','20120725','A'). テーブルデータ(1051,'20120611','20120630','A'). テーブルデータ(1052,'20120611','20120720','A'). テーブルデータ(1053,'20120611','20120710','A'). テーブルデータ(1054,'20120611','20120615','A'). テーブルデータ(1055,'20120611','20120620','A'). テーブルデータ(1056,'20120611','20120719','A'). テーブルデータ(1057,'20120611','20120712','A'). テーブルデータ(1058,'20120612','20120725','A'). テーブルデータ(1059,'20120612','20120810','A'). テーブルデータ(1060,'20120612','20120715','A'). テーブルデータ(1061,'20120612','20120705','A'). テーブルデータ(1062,'20120612','20120706','A'). テーブルデータ(1063,'20120612','20120628','A'). テーブルデータ(1064,'20120612','20120613','A'). テーブルデータ(1065,'20120613','20120619','A'). テーブルデータ(1066,'20120613','20120624','A'). テーブルデータ(1067,'20120613','20120730','A'). テーブルデータ(1068,'20120613','20120804','A'). テーブルデータ(1069,'20120613','20120715','A'). テーブルデータ(1070,'20120613','20120712','A'). テーブルデータ(1071,'20120613','20120725','A'). テーブルデータ(1072,'20120613','20120621','A'). テーブルデータ(1073,'20120613','20120714','A'). テーブルデータ(1074,'20120613','20120615','A'). テーブルデータ(1075,'20120613','20120627','A'). テーブルデータ(1076,'20120613','20120730','A'). テーブルデータ(1077,'20120613','20120810','A'). テーブルデータ(1078,'20120613','20120719','A'). テーブルデータ(1079,'20120613','20120706','A'). テーブルデータ(1080,'20120613','20120630','A'). テーブルデータ(1081,'20120614','20120805','A'). テーブルデータ(1082,'20120614','20120627','A'). テーブルデータ(1083,'20120614','20120701','A'). テーブルデータ(1084,'20120614','20120706','A'). テーブルデータ(1085,'20120614','20120729','A'). テーブルデータ(1086,'20120614','20120806','A'). テーブルデータ(1087,'20120614','20120810','A'). テーブルデータ(1088,'20120614','20120720','A'). テーブルデータ(1089,'20120615','20120706','A'). テーブルデータ(1090,'20120615','20120807','A'). テーブルデータ(1091,'20120615','20120711','A'). テーブルデータ(1092,'20120615','20120629','A'). テーブルデータ(1093,'20120615','20120615','A'). テーブルデータ(1094,'20120615','20120718','A'). テーブルデータ(1095,'20120615','20120710','A'). テーブルデータ(1096,'20120615','20120802','A'). テーブルデータ(1097,'20120615','20120710','A'). テーブルデータ(1098,'20120615','20120804','A'). テーブルデータ(1099,'20120615','20120624','A'). テーブルデータ(1100,'20120615','20120813','A'). テーブルデータ(1101,'20120615','20120812','A'). テーブルデータ(1102,'20120615','20120725','A'). テーブルデータ(1103,'20120615','20120617','A'). テーブルデータ(1104,'20120615','20120619','A'). テーブルデータ(1105,'20120615','20120704','A'). テーブルデータ(1106,'20120615','20120615','A'). テーブルデータ(1107,'20120615','20120726','A'). テーブルデータ(1108,'20120616','20120626','A'). テーブルデータ(1109,'20120616','20120726','A'). テーブルデータ(1110,'20120616','20120712','A'). テーブルデータ(1111,'20120616','20120709','A'). テーブルデータ(1112,'20120616','20120804','A'). テーブルデータ(1113,'20120616','20120726','A'). テーブルデータ(1114,'20120616','20120624','A'). テーブルデータ(1115,'20120616','20120729','A'). テーブルデータ(1116,'20120616','20120724','A'). テーブルデータ(1117,'20120616','20120723','A'). テーブルデータ(1118,'20120616','20120808','A'). テーブルデータ(1119,'20120616','20120806','A'). テーブルデータ(1120,'20120616','20120716','A'). テーブルデータ(1121,'20120617','20120622','A'). テーブルデータ(1122,'20120617','20120717','A'). テーブルデータ(1123,'20120617','20120809','A'). テーブルデータ(1124,'20120617','20120718','A'). テーブルデータ(1125,'20120617','20120705','A'). テーブルデータ(1126,'20120617','20120627','A'). テーブルデータ(1127,'20120617','20120708','A'). テーブルデータ(1128,'20120617','20120714','A'). テーブルデータ(1129,'20120617','20120626','A'). テーブルデータ(1130,'20120617','20120628','A'). テーブルデータ(1131,'20120617','20120617','A'). テーブルデータ(1132,'20120617','20120620','A'). テーブルデータ(1133,'20120617','20120702','A'). テーブルデータ(1134,'20120617','20120706','A'). テーブルデータ(1135,'20120617','20120621','A'). テーブルデータ(1136,'20120617','20120804','A'). テーブルデータ(1137,'20120617','20120810','A'). テーブルデータ(1138,'20120617','20120623','A'). テーブルデータ(1139,'20120617','20120716','A'). テーブルデータ(1140,'20120617','20120629','A'). テーブルデータ(1141,'20120617','20120716','A'). テーブルデータ(1142,'20120618','20120810','A'). テーブルデータ(1143,'20120618','20120718','A'). テーブルデータ(1144,'20120618','20120810','A'). テーブルデータ(1145,'20120618','20120711','A'). テーブルデータ(1146,'20120618','20120625','A'). テーブルデータ(1147,'20120618','20120727','A'). テーブルデータ(1148,'20120618','20120702','A'). テーブルデータ(1149,'20120618','20120717','A'). テーブルデータ(1150,'20120618','20120816','A'). テーブルデータ(1151,'20120618','20120629','A'). テーブルデータ(1152,'20120618','20120816','A'). テーブルデータ(1153,'20120619','20120731','A'). テーブルデータ(1154,'20120619','20120629','A'). テーブルデータ(1155,'20120619','20120804','A'). テーブルデータ(1156,'20120619','20120813','A'). テーブルデータ(1157,'20120619','20120718','A'). テーブルデータ(1158,'20120619','20120813','A'). テーブルデータ(1159,'20120619','20120625','A'). テーブルデータ(1160,'20120619','20120710','A'). テーブルデータ(1161,'20120619','20120809','A'). テーブルデータ(1162,'20120619','20120703','A'). テーブルデータ(1163,'20120619','20120722','A'). テーブルデータ(1164,'20120619','20120805','A'). テーブルデータ(1165,'20120619','20120621','A'). テーブルデータ(1166,'20120619','20120716','A'). テーブルデータ(1167,'20120619','20120811','A'). テーブルデータ(1168,'20120620','20120729','A'). テーブルデータ(1169,'20120620','20120712','A'). テーブルデータ(1170,'20120620','20120724','A'). テーブルデータ(1171,'20120620','20120714','A'). テーブルデータ(1172,'20120620','20120803','A'). テーブルデータ(1173,'20120620','20120709','A'). テーブルデータ(1174,'20120620','20120729','A'). テーブルデータ(1175,'20120620','20120802','A'). テーブルデータ(1176,'20120620','20120817','A'). テーブルデータ(1177,'20120620','20120812','A'). テーブルデータ(1178,'20120620','20120702','A'). テーブルデータ(1179,'20120620','20120808','A'). テーブルデータ(1180,'20120620','20120625','A'). テーブルデータ(1181,'20120620','20120624','A'). テーブルデータ(1182,'20120620','20120723','A'). テーブルデータ(1183,'20120620','20120729','A'). テーブルデータ(1184,'20120620','20120704','A'). テーブルデータ(1185,'20120620','20120709','A'). テーブルデータ(1186,'20120620','20120725','A'). テーブルデータ(1187,'20120620','20120725','A'). テーブルデータ(1188,'20120620','20120627','A'). テーブルデータ(1189,'20120620','20120723','A'). テーブルデータ(1190,'20120620','20120808','A'). テーブルデータ(1191,'20120620','20120809','A'). テーブルデータ(1192,'20120621','20120713','A'). テーブルデータ(1193,'20120621','20120728','A'). テーブルデータ(1194,'20120621','20120802','A'). テーブルデータ(1195,'20120621','20120809','A'). テーブルデータ(1196,'20120621','20120721','A'). テーブルデータ(1197,'20120621','20120626','A'). テーブルデータ(1198,'20120621','20120711','A'). テーブルデータ(1199,'20120621','20120804','A'). テーブルデータ(1200,'20120621','20120722','A'). テーブルデータ(1201,'20120621','20120728','A'). テーブルデータ(1202,'20120621','20120720','A'). テーブルデータ(1203,'20120621','20120803','A'). テーブルデータ(1204,'20120621','20120707','A'). テーブルデータ(1205,'20120621','20120703','A'). テーブルデータ(1206,'20120621','20120801','A'). テーブルデータ(1207,'20120621','20120623','A'). テーブルデータ(1208,'20120621','20120716','A'). テーブルデータ(1209,'20120621','20120714','A'). テーブルデータ(1210,'20120622','20120713','A'). テーブルデータ(1211,'20120622','20120809','A'). テーブルデータ(1212,'20120622','20120730','A'). テーブルデータ(1213,'20120622','20120719','A'). テーブルデータ(1214,'20120622','20120622','A'). テーブルデータ(1215,'20120622','20120627','A'). テーブルデータ(1216,'20120622','20120624','A'). テーブルデータ(1217,'20120622','20120629','A'). テーブルデータ(1218,'20120622','20120731','A'). テーブルデータ(1219,'20120622','20120812','A'). テーブルデータ(1220,'20120622','20120810','A'). テーブルデータ(1221,'20120622','20120718','A'). テーブルデータ(1222,'20120622','20120705','A'). テーブルデータ(1223,'20120622','20120718','A'). テーブルデータ(1224,'20120622','20120630','A'). テーブルデータ(1225,'20120622','20120815','A'). テーブルデータ(1226,'20120622','20120817','A'). テーブルデータ(1227,'20120622','20120628','A'). テーブルデータ(1228,'20120622','20120629','A'). テーブルデータ(1229,'20120622','20120724','A'). テーブルデータ(1230,'20120622','20120729','A'). テーブルデータ(1231,'20120622','20120805','A'). テーブルデータ(1232,'20120622','20120623','A'). テーブルデータ(1233,'20120622','20120712','A'). テーブルデータ(1234,'20120622','20120622','A'). テーブルデータ(1235,'20120622','20120628','A'). テーブルデータ(1236,'20120622','20120815','A'). テーブルデータ(1237,'20120622','20120815','A'). テーブルデータ(1238,'20120622','20120715','A'). テーブルデータ(1239,'20120622','20120709','A'). テーブルデータ(1240,'20120623','20120806','A'). テーブルデータ(1241,'20120623','20120819','A'). テーブルデータ(1242,'20120623','20120725','A'). テーブルデータ(1243,'20120623','20120704','A'). テーブルデータ(1244,'20120623','20120819','A'). テーブルデータ(1245,'20120623','20120722','A'). テーブルデータ(1246,'20120623','20120628','A'). テーブルデータ(1247,'20120623','20120818','A'). テーブルデータ(1248,'20120623','20120701','A'). テーブルデータ(1249,'20120623','20120811','A'). テーブルデータ(1250,'20120623','20120807','A'). テーブルデータ(1251,'20120623','20120728','A'). テーブルデータ(1252,'20120623','20120625','A'). テーブルデータ(1253,'20120623','20120704','A'). テーブルデータ(1254,'20120623','20120728','A'). テーブルデータ(1255,'20120623','20120811','A'). テーブルデータ(1256,'20120623','20120821','A'). テーブルデータ(1257,'20120623','20120803','A'). テーブルデータ(1258,'20120623','20120818','A'). テーブルデータ(1259,'20120623','20120725','A'). テーブルデータ(1260,'20120623','20120704','A'). テーブルデータ(1261,'20120623','20120802','A'). テーブルデータ(1262,'20120623','20120718','A'). テーブルデータ(1263,'20120623','20120716','A'). テーブルデータ(1264,'20120624','20120725','A'). テーブルデータ(1265,'20120624','20120703','A'). テーブルデータ(1266,'20120624','20120721','A'). テーブルデータ(1267,'20120625','20120713','A'). テーブルデータ(1268,'20120625','20120707','A'). テーブルデータ(1269,'20120625','20120725','A'). テーブルデータ(1270,'20120625','20120711','A'). テーブルデータ(1271,'20120625','20120808','A'). テーブルデータ(1272,'20120625','20120728','A'). テーブルデータ(1273,'20120625','20120708','A'). テーブルデータ(1274,'20120625','20120701','A'). テーブルデータ(1275,'20120625','20120803','A'). テーブルデータ(1276,'20120625','20120705','A'). テーブルデータ(1277,'20120625','20120709','A'). テーブルデータ(1278,'20120625','20120723','A'). テーブルデータ(1279,'20120625','20120819','A'). テーブルデータ(1280,'20120625','20120805','A'). テーブルデータ(1281,'20120625','20120717','A'). テーブルデータ(1282,'20120625','20120823','A'). テーブルデータ(1283,'20120625','20120712','A'). テーブルデータ(1284,'20120626','20120823','A'). テーブルデータ(1285,'20120626','20120815','A'). テーブルデータ(1286,'20120626','20120824','A'). テーブルデータ(1287,'20120626','20120718','A'). テーブルデータ(1288,'20120627','20120728','A'). テーブルデータ(1289,'20120627','20120814','A'). テーブルデータ(1290,'20120627','20120714','A'). テーブルデータ(1291,'20120627','20120701','A'). テーブルデータ(1292,'20120627','20120708','A'). テーブルデータ(1293,'20120627','20120723','A'). テーブルデータ(1294,'20120627','20120720','A'). テーブルデータ(1295,'20120627','20120824','A'). テーブルデータ(1296,'20120627','20120811','A'). テーブルデータ(1297,'20120627','20120801','A'). テーブルデータ(1298,'20120627','20120717','A'). テーブルデータ(1299,'20120627','20120628','A'). テーブルデータ(1300,'20120627','20120709','A'). テーブルデータ(1301,'20120627','20120812','A'). テーブルデータ(1302,'20120627','20120711','A'). テーブルデータ(1303,'20120627','20120715','A'). テーブルデータ(1304,'20120627','20120722','A'). テーブルデータ(1305,'20120627','20120713','A'). テーブルデータ(1306,'20120627','20120729','A'). テーブルデータ(1307,'20120627','20120811','A'). テーブルデータ(1308,'20120627','20120709','A'). テーブルデータ(1309,'20120627','20120703','A'). テーブルデータ(1310,'20120627','20120825','A'). テーブルデータ(1311,'20120627','20120708','A'). テーブルデータ(1312,'20120628','20120701','A'). テーブルデータ(1313,'20120628','20120629','A'). テーブルデータ(1314,'20120628','20120703','A'). テーブルデータ(1315,'20120628','20120630','A'). テーブルデータ(1316,'20120628','20120714','A'). テーブルデータ(1317,'20120628','20120826','A'). テーブルデータ(1318,'20120628','20120801','A'). テーブルデータ(1319,'20120628','20120702','A'). テーブルデータ(1320,'20120628','20120714','A'). テーブルデータ(1321,'20120628','20120728','A'). テーブルデータ(1322,'20120628','20120705','A'). テーブルデータ(1323,'20120628','20120801','A'). テーブルデータ(1324,'20120628','20120820','A'). テーブルデータ(1325,'20120628','20120824','A'). テーブルデータ(1326,'20120628','20120717','A'). テーブルデータ(1327,'20120628','20120718','A'). テーブルデータ(1328,'20120628','20120708','A'). テーブルデータ(1329,'20120628','20120710','A'). テーブルデータ(1330,'20120628','20120730','A'). テーブルデータ(1331,'20120628','20120823','A'). テーブルデータ(1332,'20120628','20120717','A'). テーブルデータ(1333,'20120628','20120817','A'). テーブルデータ(1334,'20120628','20120711','A'). テーブルデータ(1335,'20120628','20120802','A'). テーブルデータ(1336,'20120629','20120826','A'). テーブルデータ(1337,'20120629','20120815','A'). テーブルデータ(1338,'20120629','20120720','A'). テーブルデータ(1339,'20120629','20120825','A'). テーブルデータ(1340,'20120629','20120818','A'). テーブルデータ(1341,'20120629','20120804','A'). テーブルデータ(1342,'20120629','20120629','A'). テーブルデータ(1343,'20120629','20120812','A'). テーブルデータ(1344,'20120629','20120809','A'). テーブルデータ(1345,'20120629','20120702','A'). テーブルデータ(1346,'20120629','20120629','A'). テーブルデータ(1347,'20120629','20120731','A'). テーブルデータ(1348,'20120629','20120728','A'). テーブルデータ(1349,'20120629','20120824','A'). テーブルデータ(1350,'20120629','20120808','A'). テーブルデータ(1351,'20120629','20120827','A'). テーブルデータ(1352,'20120630','20120715','A'). テーブルデータ(1353,'20120630','20120813','A'). テーブルデータ(1354,'20120630','20120822','A'). テーブルデータ(1355,'20120630','20120726','A'). テーブルデータ(1356,'20120701','20120704','A'). テーブルデータ(1357,'20120701','20120801','A'). テーブルデータ(1358,'20120701','20120730','A'). テーブルデータ(1359,'20120701','20120821','A'). テーブルデータ(1360,'20120701','20120820','A'). テーブルデータ(1361,'20120702','20120706','A'). テーブルデータ(1362,'20120702','20120727','A'). テーブルデータ(1363,'20120702','20120728','A'). テーブルデータ(1364,'20120702','20120704','A'). テーブルデータ(1365,'20120702','20120707','A'). テーブルデータ(1366,'20120702','20120810','A'). テーブルデータ(1367,'20120702','20120822','A'). テーブルデータ(1368,'20120702','20120818','A'). テーブルデータ(1369,'20120702','20120709','A'). テーブルデータ(1370,'20120702','20120815','A'). テーブルデータ(1371,'20120702','20120802','A'). テーブルデータ(1372,'20120702','20120812','A'). テーブルデータ(1373,'20120702','20120810','A'). テーブルデータ(1374,'20120702','20120802','A'). テーブルデータ(1375,'20120702','20120715','A'). テーブルデータ(1376,'20120702','20120710','A'). テーブルデータ(1377,'20120702','20120729','A'). テーブルデータ(1378,'20120702','20120825','A'). テーブルデータ(1379,'20120702','20120830','A'). テーブルデータ(1380,'20120702','20120725','A'). テーブルデータ(1381,'20120703','20120815','A'). テーブルデータ(1382,'20120703','20120711','A'). テーブルデータ(1383,'20120704','20120812','A'). テーブルデータ(1384,'20120704','20120707','A'). テーブルデータ(1385,'20120704','20120831','A'). テーブルデータ(1386,'20120704','20120712','A'). テーブルデータ(1387,'20120704','20120827','A'). テーブルデータ(1388,'20120704','20120813','A'). テーブルデータ(1389,'20120704','20120724','A'). テーブルデータ(1390,'20120704','20120831','A'). テーブルデータ(1391,'20120704','20120710','A'). テーブルデータ(1392,'20120704','20120811','A'). テーブルデータ(1393,'20120704','20120825','A'). テーブルデータ(1394,'20120704','20120707','A'). テーブルデータ(1395,'20120704','20120722','A'). テーブルデータ(1396,'20120704','20120808','A'). テーブルデータ(1397,'20120704','20120823','A'). テーブルデータ(1398,'20120704','20120729','A'). テーブルデータ(1399,'20120704','20120723','A'). テーブルデータ(1400,'20120704','20120726','A'). テーブルデータ(1401,'20120704','20120710','A'). テーブルデータ(1402,'20120704','20120831','A'). テーブルデータ(1403,'20120704','20120818','A'). テーブルデータ(1404,'20120704','20120716','A'). テーブルデータ(1405,'20120704','20120831','A'). テーブルデータ(1406,'20120704','20120717','A'). テーブルデータ(1407,'20120704','20120710','A'). テーブルデータ(1408,'20120704','20120830','A'). テーブルデータ(1409,'20120704','20120801','A'). テーブルデータ(1410,'20120704','20120711','A'). テーブルデータ(1411,'20120705','20120810','A'). テーブルデータ(1412,'20120705','20120731','A'). テーブルデータ(1413,'20120705','20120717','A'). テーブルデータ(1414,'20120706','20120723','A'). テーブルデータ(1415,'20120706','20120726','A'). テーブルデータ(1416,'20120706','20120808','A'). テーブルデータ(1417,'20120706','20120901','A'). テーブルデータ(1418,'20120706','20120807','A'). テーブルデータ(1419,'20120706','20120729','A'). テーブルデータ(1420,'20120706','20120830','A'). テーブルデータ(1421,'20120706','20120717','A'). テーブルデータ(1422,'20120706','20120713','A'). テーブルデータ(1423,'20120706','20120902','A'). テーブルデータ(1424,'20120707','20120810','A'). テーブルデータ(1425,'20120707','20120817','A'). テーブルデータ(1426,'20120707','20120822','A'). テーブルデータ(1427,'20120707','20120830','A'). テーブルデータ(1428,'20120707','20120710','A'). テーブルデータ(1429,'20120707','20120821','A'). テーブルデータ(1430,'20120707','20120820','A'). テーブルデータ(1431,'20120707','20120824','A'). テーブルデータ(1432,'20120707','20120902','A'). テーブルデータ(1433,'20120707','20120819','A'). テーブルデータ(1434,'20120707','20120829','A'). テーブルデータ(1435,'20120707','20120831','A'). テーブルデータ(1436,'20120707','20120816','A'). テーブルデータ(1437,'20120707','20120728','A'). テーブルデータ(1438,'20120707','20120830','A'). テーブルデータ(1439,'20120707','20120712','A'). テーブルデータ(1440,'20120707','20120902','A'). テーブルデータ(1441,'20120707','20120727','A'). テーブルデータ(1442,'20120707','20120724','A'). テーブルデータ(1443,'20120707','20120804','A'). テーブルデータ(1444,'20120707','20120805','A'). テーブルデータ(1445,'20120707','20120805','A'). テーブルデータ(1446,'20120707','20120829','A'). テーブルデータ(1447,'20120707','20120726','A'). テーブルデータ(1448,'20120707','20120830','A'). テーブルデータ(1449,'20120707','20120723','A'). テーブルデータ(1450,'20120707','20120721','A'). テーブルデータ(1451,'20120707','20120712','A'). テーブルデータ(1452,'20120707','20120722','A'). テーブルデータ(1453,'20120707','20120712','A'). テーブルデータ(1454,'20120708','20120827','A'). テーブルデータ(1455,'20120708','20120823','A'). テーブルデータ(1456,'20120708','20120720','A'). テーブルデータ(1457,'20120708','20120813','A'). テーブルデータ(1458,'20120708','20120826','A'). テーブルデータ(1459,'20120708','20120826','A'). テーブルデータ(1460,'20120708','20120720','A'). テーブルデータ(1461,'20120708','20120806','A'). テーブルデータ(1462,'20120708','20120823','A'). テーブルデータ(1463,'20120708','20120901','A'). テーブルデータ(1464,'20120708','20120723','A'). テーブルデータ(1465,'20120708','20120810','A'). テーブルデータ(1466,'20120708','20120805','A'). テーブルデータ(1467,'20120708','20120813','A'). テーブルデータ(1468,'20120708','20120804','A'). テーブルデータ(1469,'20120708','20120810','A'). テーブルデータ(1470,'20120708','20120803','A'). テーブルデータ(1471,'20120708','20120817','A'). テーブルデータ(1472,'20120708','20120819','A'). テーブルデータ(1473,'20120708','20120823','A'). テーブルデータ(1474,'20120708','20120717','A'). テーブルデータ(1475,'20120708','20120711','A'). テーブルデータ(1476,'20120708','20120817','A'). テーブルデータ(1477,'20120708','20120805','A'). テーブルデータ(1478,'20120708','20120903','A'). テーブルデータ(1479,'20120708','20120902','A'). テーブルデータ(1480,'20120708','20120812','A'). テーブルデータ(1481,'20120709','20120713','A'). テーブルデータ(1482,'20120709','20120818','A'). テーブルデータ(1483,'20120709','20120729','A'). テーブルデータ(1484,'20120710','20120728','A'). テーブルデータ(1485,'20120710','20120804','A'). テーブルデータ(1486,'20120710','20120724','A'). テーブルデータ(1487,'20120710','20120907','A'). テーブルデータ(1488,'20120710','20120724','A'). テーブルデータ(1489,'20120710','20120805','A'). テーブルデータ(1490,'20120710','20120807','A'). テーブルデータ(1491,'20120710','20120901','A'). テーブルデータ(1492,'20120710','20120801','A'). テーブルデータ(1493,'20120710','20120822','A'). テーブルデータ(1494,'20120710','20120805','A'). テーブルデータ(1495,'20120710','20120821','A'). テーブルデータ(1496,'20120710','20120722','A'). テーブルデータ(1497,'20120710','20120902','A'). テーブルデータ(1498,'20120710','20120717','A'). テーブルデータ(1499,'20120710','20120809','A'). テーブルデータ(1500,'20120710','20120813','A'). テーブルデータ(1501,'20120711','20120727','A'). テーブルデータ(1502,'20120711','20120815','A'). テーブルデータ(1503,'20120711','20120824','A'). テーブルデータ(1504,'20120711','20120905','A'). テーブルデータ(1505,'20120711','20120715','A'). テーブルデータ(1506,'20120711','20120822','A'). テーブルデータ(1507,'20120711','20120825','A'). テーブルデータ(1508,'20120711','20120811','A'). テーブルデータ(1509,'20120711','20120816','A'). テーブルデータ(1510,'20120711','20120821','A'). テーブルデータ(1511,'20120711','20120714','A'). テーブルデータ(1512,'20120711','20120906','A'). テーブルデータ(1513,'20120711','20120807','A'). テーブルデータ(1514,'20120711','20120801','A'). テーブルデータ(1515,'20120711','20120802','A'). テーブルデータ(1516,'20120711','20120821','A'). テーブルデータ(1517,'20120711','20120731','A'). テーブルデータ(1518,'20120711','20120808','A'). テーブルデータ(1519,'20120711','20120908','A'). テーブルデータ(1520,'20120711','20120820','A'). テーブルデータ(1521,'20120712','20120725','A'). テーブルデータ(1522,'20120712','20120805','A'). テーブルデータ(1523,'20120712','20120829','A'). テーブルデータ(1524,'20120712','20120905','A'). テーブルデータ(1525,'20120712','20120809','A'). テーブルデータ(1526,'20120712','20120823','A'). テーブルデータ(1527,'20120712','20120714','A'). テーブルデータ(1528,'20120712','20120831','A'). テーブルデータ(1529,'20120712','20120728','A'). テーブルデータ(1530,'20120712','20120824','A'). テーブルデータ(1531,'20120712','20120718','A'). テーブルデータ(1532,'20120712','20120901','A'). テーブルデータ(1533,'20120712','20120801','A'). テーブルデータ(1534,'20120712','20120905','A'). テーブルデータ(1535,'20120712','20120828','A'). テーブルデータ(1536,'20120712','20120904','A'). テーブルデータ(1537,'20120712','20120813','A'). テーブルデータ(1538,'20120712','20120722','A'). テーブルデータ(1539,'20120712','20120811','A'). テーブルデータ(1540,'20120712','20120725','A'). テーブルデータ(1541,'20120712','20120725','A'). テーブルデータ(1542,'20120712','20120731','A'). テーブルデータ(1543,'20120713','20120816','A'). テーブルデータ(1544,'20120713','20120815','A'). テーブルデータ(1545,'20120713','20120726','A'). テーブルデータ(1546,'20120713','20120905','A'). テーブルデータ(1547,'20120713','20120715','A'). テーブルデータ(1548,'20120713','20120717','A'). テーブルデータ(1549,'20120713','20120817','A'). テーブルデータ(1550,'20120713','20120805','A'). テーブルデータ(1551,'20120713','20120731','A'). テーブルデータ(1552,'20120713','20120902','A'). テーブルデータ(1553,'20120713','20120724','A'). テーブルデータ(1554,'20120714','20120725','A'). テーブルデータ(1555,'20120714','20120828','A'). テーブルデータ(1556,'20120714','20120722','A'). テーブルデータ(1557,'20120714','20120715','A'). テーブルデータ(1558,'20120714','20120905','A'). テーブルデータ(1559,'20120714','20120826','A'). テーブルデータ(1560,'20120714','20120911','A'). テーブルデータ(1561,'20120714','20120820','A'). テーブルデータ(1562,'20120714','20120907','A'). テーブルデータ(1563,'20120714','20120906','A'). テーブルデータ(1564,'20120714','20120807','A'). テーブルデータ(1565,'20120714','20120901','A'). テーブルデータ(1566,'20120714','20120809','A'). テーブルデータ(1567,'20120714','20120810','A'). テーブルデータ(1568,'20120715','20120815','A'). テーブルデータ(1569,'20120715','20120824','A'). テーブルデータ(1570,'20120715','20120815','A'). テーブルデータ(1571,'20120715','20120718','A'). テーブルデータ(1572,'20120715','20120722','A'). テーブルデータ(1573,'20120715','20120910','A'). テーブルデータ(1574,'20120715','20120731','A'). テーブルデータ(1575,'20120715','20120906','A'). テーブルデータ(1576,'20120715','20120912','A'). テーブルデータ(1577,'20120715','20120805','A'). テーブルデータ(1578,'20120715','20120804','A'). テーブルデータ(1579,'20120715','20120729','A'). テーブルデータ(1580,'20120715','20120815','A'). テーブルデータ(1581,'20120716','20120803','A'). テーブルデータ(1582,'20120716','20120821','A'). テーブルデータ(1583,'20120716','20120730','A'). テーブルデータ(1584,'20120716','20120719','A'). テーブルデータ(1585,'20120716','20120829','A'). テーブルデータ(1586,'20120716','20120723','A'). テーブルデータ(1587,'20120716','20120911','A'). テーブルデータ(1588,'20120716','20120805','A'). テーブルデータ(1589,'20120716','20120723','A'). テーブルデータ(1590,'20120716','20120819','A'). テーブルデータ(1591,'20120716','20120731','A'). テーブルデータ(1592,'20120716','20120907','A'). テーブルデータ(1593,'20120717','20120912','A'). テーブルデータ(1594,'20120717','20120729','A'). テーブルデータ(1595,'20120717','20120726','A'). テーブルデータ(1596,'20120717','20120726','A'). テーブルデータ(1597,'20120717','20120829','A'). テーブルデータ(1598,'20120717','20120905','A'). テーブルデータ(1599,'20120717','20120818','A'). テーブルデータ(1600,'20120717','20120902','A'). テーブルデータ(1601,'20120717','20120904','A'). テーブルデータ(1602,'20120717','20120815','A'). テーブルデータ(1603,'20120717','20120910','A'). テーブルデータ(1604,'20120717','20120828','A'). テーブルデータ(1605,'20120717','20120806','A'). テーブルデータ(1606,'20120717','20120725','A'). テーブルデータ(1607,'20120717','20120720','A'). テーブルデータ(1608,'20120717','20120821','A'). テーブルデータ(1609,'20120717','20120825','A'). テーブルデータ(1610,'20120717','20120723','A'). テーブルデータ(1611,'20120717','20120831','A'). テーブルデータ(1612,'20120717','20120802','A'). テーブルデータ(1613,'20120717','20120730','A'). テーブルデータ(1614,'20120718','20120908','A'). テーブルデータ(1615,'20120718','20120807','A'). テーブルデータ(1616,'20120718','20120824','A'). テーブルデータ(1617,'20120718','20120722','A'). テーブルデータ(1618,'20120718','20120814','A'). テーブルデータ(1619,'20120718','20120721','A'). テーブルデータ(1620,'20120718','20120807','A'). テーブルデータ(1621,'20120718','20120808','A'). テーブルデータ(1622,'20120718','20120902','A'). テーブルデータ(1623,'20120718','20120804','A'). テーブルデータ(1624,'20120718','20120812','A'). テーブルデータ(1625,'20120719','20120806','A'). テーブルデータ(1626,'20120719','20120727','A'). テーブルデータ(1627,'20120719','20120817','A'). テーブルデータ(1628,'20120719','20120907','A'). テーブルデータ(1629,'20120719','20120904','A'). テーブルデータ(1630,'20120719','20120806','A'). テーブルデータ(1631,'20120719','20120808','A'). テーブルデータ(1632,'20120719','20120831','A'). テーブルデータ(1633,'20120719','20120720','A'). テーブルデータ(1634,'20120719','20120828','A'). テーブルデータ(1635,'20120719','20120831','A'). テーブルデータ(1636,'20120719','20120913','A'). テーブルデータ(1637,'20120719','20120726','A'). テーブルデータ(1638,'20120719','20120811','A'). テーブルデータ(1639,'20120719','20120721','A'). テーブルデータ(1640,'20120719','20120909','A'). テーブルデータ(1641,'20120719','20120819','A'). テーブルデータ(1642,'20120719','20120803','A'). テーブルデータ(1643,'20120720','20120812','A'). テーブルデータ(1644,'20120720','20120817','A'). テーブルデータ(1645,'20120720','20120722','A'). テーブルデータ(1646,'20120720','20120817','A'). テーブルデータ(1647,'20120721','20120917','A'). テーブルデータ(1648,'20120721','20120830','A'). テーブルデータ(1649,'20120721','20120729','A'). テーブルデータ(1650,'20120721','20120826','A'). テーブルデータ(1651,'20120721','20120908','A'). テーブルデータ(1652,'20120721','20120823','A'). テーブルデータ(1653,'20120721','20120813','A'). テーブルデータ(1654,'20120721','20120728','A'). テーブルデータ(1655,'20120721','20120824','A'). テーブルデータ(1656,'20120721','20120912','A'). テーブルデータ(1657,'20120721','20120916','A'). テーブルデータ(1658,'20120721','20120811','A'). テーブルデータ(1659,'20120721','20120724','A'). テーブルデータ(1660,'20120721','20120730','A'). テーブルデータ(1661,'20120721','20120915','A'). テーブルデータ(1662,'20120721','20120725','A'). テーブルデータ(1663,'20120721','20120901','A'). テーブルデータ(1664,'20120721','20120830','A'). テーブルデータ(1665,'20120721','20120911','A'). テーブルデータ(1666,'20120721','20120908','A'). テーブルデータ(1667,'20120721','20120914','A'). テーブルデータ(1668,'20120721','20120906','A'). テーブルデータ(1669,'20120721','20120824','A'). テーブルデータ(1670,'20120721','20120816','A'). テーブルデータ(1671,'20120721','20120913','A'). テーブルデータ(1672,'20120721','20120918','A'). テーブルデータ(1673,'20120722','20120813','A'). テーブルデータ(1674,'20120722','20120913','A'). テーブルデータ(1675,'20120722','20120723','A'). テーブルデータ(1676,'20120722','20120809','A'). テーブルデータ(1677,'20120722','20120911','A'). テーブルデータ(1678,'20120722','20120824','A'). テーブルデータ(1679,'20120722','20120809','A'). テーブルデータ(1680,'20120722','20120810','A'). テーブルデータ(1681,'20120722','20120813','A'). テーブルデータ(1682,'20120722','20120904','A'). テーブルデータ(1683,'20120722','20120826','A'). テーブルデータ(1684,'20120722','20120812','A'). テーブルデータ(1685,'20120723','20120812','A'). テーブルデータ(1686,'20120723','20120803','A'). テーブルデータ(1687,'20120723','20120815','A'). テーブルデータ(1688,'20120723','20120815','A'). テーブルデータ(1689,'20120723','20120812','A'). テーブルデータ(1690,'20120723','20120812','A'). テーブルデータ(1691,'20120723','20120812','A'). テーブルデータ(1692,'20120723','20120725','A'). テーブルデータ(1693,'20120723','20120913','A'). テーブルデータ(1694,'20120723','20120804','A'). テーブルデータ(1695,'20120723','20120905','A'). テーブルデータ(1696,'20120724','20120921','A'). テーブルデータ(1697,'20120724','20120811','A'). テーブルデータ(1698,'20120724','20120729','A'). テーブルデータ(1699,'20120724','20120916','A'). テーブルデータ(1700,'20120724','20120810','A'). テーブルデータ(1701,'20120724','20120831','A'). テーブルデータ(1702,'20120724','20120809','A'). テーブルデータ(1703,'20120724','20120803','A'). テーブルデータ(1704,'20120724','20120902','A'). テーブルデータ(1705,'20120724','20120819','A'). テーブルデータ(1706,'20120724','20120916','A'). テーブルデータ(1707,'20120724','20120806','A'). テーブルデータ(1708,'20120724','20120830','A'). テーブルデータ(1709,'20120724','20120729','A'). テーブルデータ(1710,'20120724','20120821','A'). テーブルデータ(1711,'20120724','20120814','A'). テーブルデータ(1712,'20120724','20120902','A'). テーブルデータ(1713,'20120724','20120911','A'). テーブルデータ(1714,'20120725','20120725','A'). テーブルデータ(1715,'20120725','20120915','A'). テーブルデータ(1716,'20120725','20120909','A'). テーブルデータ(1717,'20120725','20120818','A'). テーブルデータ(1718,'20120725','20120807','A'). テーブルデータ(1719,'20120725','20120921','A'). テーブルデータ(1720,'20120725','20120830','A'). テーブルデータ(1721,'20120725','20120801','A'). テーブルデータ(1722,'20120725','20120913','A'). テーブルデータ(1723,'20120725','20120911','A'). テーブルデータ(1724,'20120725','20120914','A'). テーブルデータ(1725,'20120725','20120823','A'). テーブルデータ(1726,'20120725','20120911','A'). テーブルデータ(1727,'20120725','20120726','A'). テーブルデータ(1728,'20120725','20120820','A'). テーブルデータ(1729,'20120725','20120828','A'). テーブルデータ(1730,'20120725','20120812','A'). テーブルデータ(1731,'20120725','20120730','A'). テーブルデータ(1732,'20120725','20120913','A'). テーブルデータ(1733,'20120725','20120815','A'). テーブルデータ(1734,'20120725','20120908','A'). テーブルデータ(1735,'20120725','20120803','A'). テーブルデータ(1736,'20120725','20120801','A'). テーブルデータ(1737,'20120725','20120913','A'). テーブルデータ(1738,'20120726','20120807','A'). テーブルデータ(1739,'20120726','20120813','A'). テーブルデータ(1740,'20120726','20120923','A'). テーブルデータ(1741,'20120726','20120909','A'). テーブルデータ(1742,'20120726','20120726','A'). テーブルデータ(1743,'20120726','20120817','A'). テーブルデータ(1744,'20120726','20120901','A'). テーブルデータ(1745,'20120726','20120916','A'). テーブルデータ(1746,'20120726','20120803','A'). テーブルデータ(1747,'20120726','20120727','A'). テーブルデータ(1748,'20120726','20120921','A'). テーブルデータ(1749,'20120726','20120802','A'). テーブルデータ(1750,'20120726','20120824','A'). テーブルデータ(1751,'20120726','20120921','A'). テーブルデータ(1752,'20120726','20120913','A'). テーブルデータ(1753,'20120726','20120813','A'). テーブルデータ(1754,'20120726','20120912','A'). テーブルデータ(1755,'20120727','20120923','A'). テーブルデータ(1756,'20120727','20120915','A'). テーブルデータ(1757,'20120727','20120910','A'). テーブルデータ(1758,'20120727','20120828','A'). テーブルデータ(1759,'20120727','20120727','A'). テーブルデータ(1760,'20120727','20120907','A'). テーブルデータ(1761,'20120727','20120810','A'). テーブルデータ(1762,'20120727','20120809','A'). テーブルデータ(1763,'20120727','20120823','A'). テーブルデータ(1764,'20120727','20120819','A'). テーブルデータ(1765,'20120727','20120816','A'). テーブルデータ(1766,'20120727','20120806','A'). テーブルデータ(1767,'20120727','20120728','A'). テーブルデータ(1768,'20120727','20120821','A'). テーブルデータ(1769,'20120727','20120824','A'). テーブルデータ(1770,'20120727','20120727','A'). テーブルデータ(1771,'20120727','20120806','A'). テーブルデータ(1772,'20120727','20120816','A'). テーブルデータ(1773,'20120727','20120810','A'). テーブルデータ(1774,'20120727','20120912','A'). テーブルデータ(1775,'20120728','20120820','A'). テーブルデータ(1776,'20120728','20120907','A'). テーブルデータ(1777,'20120728','20120920','A'). テーブルデータ(1778,'20120728','20120819','A'). テーブルデータ(1779,'20120728','20120807','A'). テーブルデータ(1780,'20120728','20120917','A'). テーブルデータ(1781,'20120729','20120818','A'). テーブルデータ(1782,'20120729','20120907','A'). テーブルデータ(1783,'20120729','20120812','A'). テーブルデータ(1784,'20120729','20120816','A'). テーブルデータ(1785,'20120730','20120920','A'). テーブルデータ(1786,'20120730','20120918','A'). テーブルデータ(1787,'20120730','20120821','A'). テーブルデータ(1788,'20120730','20120902','A'). テーブルデータ(1789,'20120730','20120804','A'). テーブルデータ(1790,'20120730','20120827','A'). テーブルデータ(1791,'20120730','20120922','A'). テーブルデータ(1792,'20120730','20120819','A'). テーブルデータ(1793,'20120730','20120916','A'). テーブルデータ(1794,'20120730','20120803','A'). テーブルデータ(1795,'20120730','20120821','A'). テーブルデータ(1796,'20120730','20120804','A'). テーブルデータ(1797,'20120730','20120823','A'). テーブルデータ(1798,'20120730','20120821','A'). テーブルデータ(1799,'20120730','20120806','A'). テーブルデータ(1800,'20120730','20120913','A'). テーブルデータ(1801,'20120730','20120905','A'). テーブルデータ(1802,'20120730','20120923','A'). テーブルデータ(1803,'20120730','20120910','A'). テーブルデータ(1804,'20120730','20120920','A'). テーブルデータ(1805,'20120730','20120827','A'). テーブルデータ(1806,'20120730','20120904','A'). テーブルデータ(1807,'20120730','20120805','A'). テーブルデータ(1808,'20120731','20120820','A'). テーブルデータ(1809,'20120801','20120921','A'). テーブルデータ(1810,'20120801','20120922','A'). テーブルデータ(1811,'20120801','20120817','A'). テーブルデータ(1812,'20120801','20120810','A'). テーブルデータ(1813,'20120801','20120815','A'). テーブルデータ(1814,'20120801','20120809','A'). テーブルデータ(1815,'20120801','20120922','A'). テーブルデータ(1816,'20120801','20120829','A'). テーブルデータ(1817,'20120801','20120912','A'). テーブルデータ(1818,'20120801','20120927','A'). テーブルデータ(1819,'20120802','20120907','A'). テーブルデータ(1820,'20120802','20120819','A'). テーブルデータ(1821,'20120802','20120908','A'). テーブルデータ(1822,'20120802','20120911','A'). テーブルデータ(1823,'20120802','20120910','A'). テーブルデータ(1824,'20120802','20120905','A'). テーブルデータ(1825,'20120802','20120807','A'). テーブルデータ(1826,'20120802','20120925','A'). テーブルデータ(1827,'20120802','20120913','A'). テーブルデータ(1828,'20120802','20120913','A'). テーブルデータ(1829,'20120802','20120825','A'). テーブルデータ(1830,'20120802','20120831','A'). テーブルデータ(1831,'20120802','20120818','A'). テーブルデータ(1832,'20120802','20120817','A'). テーブルデータ(1833,'20120802','20120928','A'). テーブルデータ(1834,'20120802','20120915','A'). テーブルデータ(1835,'20120802','20120815','A'). テーブルデータ(1836,'20120802','20120821','A'). テーブルデータ(1837,'20120802','20120806','A'). テーブルデータ(1838,'20120803','20120813','A'). テーブルデータ(1839,'20120803','20120928','A'). テーブルデータ(1840,'20120803','20120902','A'). テーブルデータ(1841,'20120803','20120815','A'). テーブルデータ(1842,'20120803','20120805','A'). テーブルデータ(1843,'20120803','20120910','A'). テーブルデータ(1844,'20120803','20120807','A'). テーブルデータ(1845,'20120803','20120826','A'). テーブルデータ(1846,'20120803','20120824','A'). テーブルデータ(1847,'20120803','20120804','A'). テーブルデータ(1848,'20120803','20120814','A'). テーブルデータ(1849,'20120803','20120921','A'). テーブルデータ(1850,'20120803','20120813','A'). テーブルデータ(1851,'20120803','20120912','A'). テーブルデータ(1852,'20120803','20120902','A'). テーブルデータ(1853,'20120804','20120819','A'). テーブルデータ(1854,'20120804','20120831','A'). テーブルデータ(1855,'20120804','20120909','A'). テーブルデータ(1856,'20120804','20120922','A'). テーブルデータ(1857,'20120804','20120805','A'). テーブルデータ(1858,'20120804','20121002','A'). テーブルデータ(1859,'20120804','20120822','A'). テーブルデータ(1860,'20120804','20120821','A'). テーブルデータ(1861,'20120804','20120810','A'). テーブルデータ(1862,'20120804','20120819','A'). テーブルデータ(1863,'20120804','20120805','A'). テーブルデータ(1864,'20120804','20120815','A'). テーブルデータ(1865,'20120804','20120907','A'). テーブルデータ(1866,'20120805','20120830','A'). テーブルデータ(1867,'20120805','20120911','A'). テーブルデータ(1868,'20120805','20120920','A'). テーブルデータ(1869,'20120805','20120930','A'). テーブルデータ(1870,'20120805','20120923','A'). テーブルデータ(1871,'20120805','20120915','A'). テーブルデータ(1872,'20120805','20120908','A'). テーブルデータ(1873,'20120805','20120927','A'). テーブルデータ(1874,'20120805','20120930','A'). テーブルデータ(1875,'20120805','20120921','A'). テーブルデータ(1876,'20120805','20120920','A'). テーブルデータ(1877,'20120805','20121003','A'). テーブルデータ(1878,'20120805','20120911','A'). テーブルデータ(1879,'20120805','20120930','A'). テーブルデータ(1880,'20120805','20120914','A'). テーブルデータ(1881,'20120805','20121003','A'). テーブルデータ(1882,'20120805','20120904','A'). テーブルデータ(1883,'20120805','20120921','A'). テーブルデータ(1884,'20120805','20120831','A'). テーブルデータ(1885,'20120805','20120811','A'). テーブルデータ(1886,'20120805','20120902','A'). テーブルデータ(1887,'20120805','20120901','A'). テーブルデータ(1888,'20120805','20121001','A'). テーブルデータ(1889,'20120805','20120920','A'). テーブルデータ(1890,'20120805','20120910','A'). テーブルデータ(1891,'20120805','20120929','A'). テーブルデータ(1892,'20120805','20120927','A'). テーブルデータ(1893,'20120805','20120911','A'). テーブルデータ(1894,'20120805','20120811','A'). テーブルデータ(1895,'20120806','20120902','A'). テーブルデータ(1896,'20120806','20120907','A'). テーブルデータ(1897,'20120806','20121001','A'). テーブルデータ(1898,'20120806','20120820','A'). テーブルデータ(1899,'20120806','20120826','A'). テーブルデータ(1900,'20120806','20120912','A'). テーブルデータ(1901,'20120806','20120930','A'). テーブルデータ(1902,'20120806','20120929','A'). テーブルデータ(1903,'20120806','20120905','A'). テーブルデータ(1904,'20120806','20120926','A'). テーブルデータ(1905,'20120806','20120917','A'). テーブルデータ(1906,'20120806','20120814','A'). テーブルデータ(1907,'20120806','20120925','A'). テーブルデータ(1908,'20120806','20120817','A'). テーブルデータ(1909,'20120806','20120811','A'). テーブルデータ(1910,'20120806','20120828','A'). テーブルデータ(1911,'20120806','20120816','A'). テーブルデータ(1912,'20120806','20120902','A'). テーブルデータ(1913,'20120806','20120807','A'). テーブルデータ(1914,'20120806','20120911','A'). テーブルデータ(1915,'20120807','20120905','A'). テーブルデータ(1916,'20120807','20121001','A'). テーブルデータ(1917,'20120807','20120830','A'). テーブルデータ(1918,'20120807','20120822','A'). テーブルデータ(1919,'20120807','20120907','A'). テーブルデータ(1920,'20120808','20120808','A'). テーブルデータ(1921,'20120808','20120808','A'). テーブルデータ(1922,'20120808','20120825','A'). テーブルデータ(1923,'20120808','20120828','A'). テーブルデータ(1924,'20120808','20120905','A'). テーブルデータ(1925,'20120808','20120918','A'). テーブルデータ(1926,'20120808','20120824','A'). テーブルデータ(1927,'20120808','20120911','A'). テーブルデータ(1928,'20120808','20120809','A'). テーブルデータ(1929,'20120808','20121001','A'). テーブルデータ(1930,'20120808','20120906','A'). テーブルデータ(1931,'20120808','20120925','A'). テーブルデータ(1932,'20120809','20120821','A'). テーブルデータ(1933,'20120809','20120831','A'). テーブルデータ(1934,'20120809','20120903','A'). テーブルデータ(1935,'20120809','20120811','A'). テーブルデータ(1936,'20120809','20120911','A'). テーブルデータ(1937,'20120809','20120831','A'). テーブルデータ(1938,'20120809','20120826','A'). テーブルデータ(1939,'20120809','20120921','A'). テーブルデータ(1940,'20120809','20120927','A'). テーブルデータ(1941,'20120809','20120819','A'). テーブルデータ(1942,'20120809','20120820','A'). テーブルデータ(1943,'20120809','20120824','A'). テーブルデータ(1944,'20120809','20120918','A'). テーブルデータ(1945,'20120809','20120815','A'). テーブルデータ(1946,'20120809','20120917','A'). テーブルデータ(1947,'20120809','20120925','A'). テーブルデータ(1948,'20120809','20120907','A'). テーブルデータ(1949,'20120810','20120927','A'). テーブルデータ(1950,'20120810','20120908','A'). テーブルデータ(1951,'20120810','20121008','A'). テーブルデータ(1952,'20120810','20120818','A'). テーブルデータ(1953,'20120810','20120928','A'). テーブルデータ(1954,'20120810','20120912','A'). テーブルデータ(1955,'20120810','20120826','A'). テーブルデータ(1956,'20120810','20120902','A'). テーブルデータ(1957,'20120810','20120905','A'). テーブルデータ(1958,'20120810','20120820','A'). テーブルデータ(1959,'20120810','20120923','A'). テーブルデータ(1960,'20120810','20120824','A'). テーブルデータ(1961,'20120810','20120829','A'). テーブルデータ(1962,'20120811','20120916','A'). テーブルデータ(1963,'20120811','20120924','A'). テーブルデータ(1964,'20120811','20121001','A'). テーブルデータ(1965,'20120811','20120820','A'). テーブルデータ(1966,'20120811','20121008','A'). テーブルデータ(1967,'20120811','20120811','A'). テーブルデータ(1968,'20120811','20120924','A'). テーブルデータ(1969,'20120811','20120919','A'). テーブルデータ(1970,'20120811','20120821','A'). テーブルデータ(1971,'20120811','20121005','A'). テーブルデータ(1972,'20120811','20121005','A'). テーブルデータ(1973,'20120811','20120930','A'). テーブルデータ(1974,'20120811','20120812','A'). テーブルデータ(1975,'20120811','20120906','A'). テーブルデータ(1976,'20120811','20120910','A'). テーブルデータ(1977,'20120811','20120902','A'). テーブルデータ(1978,'20120811','20120819','A'). テーブルデータ(1979,'20120811','20120829','A'). テーブルデータ(1980,'20120811','20120924','A'). テーブルデータ(1981,'20120811','20121009','A'). テーブルデータ(1982,'20120811','20120829','A'). テーブルデータ(1983,'20120811','20120913','A'). テーブルデータ(1984,'20120811','20120904','A'). テーブルデータ(1985,'20120811','20120914','A'). テーブルデータ(1986,'20120811','20120929','A'). テーブルデータ(1987,'20120811','20121001','A'). テーブルデータ(1988,'20120811','20120917','A'). テーブルデータ(1989,'20120812','20121008','A'). テーブルデータ(1990,'20120812','20121007','A'). テーブルデータ(1991,'20120812','20120903','A'). テーブルデータ(1992,'20120812','20120915','A'). テーブルデータ(1993,'20120812','20120913','A'). テーブルデータ(1994,'20120812','20120817','A'). テーブルデータ(1995,'20120812','20120916','A'). テーブルデータ(1996,'20120812','20120911','A'). テーブルデータ(1997,'20120812','20120817','A'). テーブルデータ(1998,'20120812','20120824','A'). テーブルデータ(1999,'20120812','20120821','A'). テーブルデータ(2000,'20120812','20120819','A'). テーブルデータ(2001,'20120812','20120819','A'). テーブルデータ(2002,'20120812','20121007','A'). テーブルデータ(2003,'20120812','20121009','A'). テーブルデータ(2004,'20120812','20120813','A'). テーブルデータ(2005,'20120812','20120903','A'). テーブルデータ(2006,'20120812','20120901','A'). テーブルデータ(2007,'20120812','20120904','A'). テーブルデータ(2008,'20120812','20120903','A'). テーブルデータ(2009,'20120812','20120919','A'). テーブルデータ(2010,'20120812','20120819','A'). テーブルデータ(2011,'20120812','20120826','A'). テーブルデータ(2012,'20120812','20121007','A'). テーブルデータ(2013,'20120812','20120914','A'). テーブルデータ(2014,'20120812','20120919','A'). テーブルデータ(2015,'20120813','20120827','A'). テーブルデータ(2016,'20120814','20120821','A'). テーブルデータ(2017,'20120814','20120922','A'). テーブルデータ(2018,'20120814','20120910','A'). テーブルデータ(2019,'20120814','20121008','A'). テーブルデータ(2020,'20120814','20120815','A'). テーブルデータ(2021,'20120814','20121006','A'). テーブルデータ(2022,'20120814','20120910','A'). テーブルデータ(2023,'20120814','20121011','A'). テーブルデータ(2024,'20120814','20120903','A'). テーブルデータ(2025,'20120814','20121002','A'). テーブルデータ(2026,'20120814','20121008','A'). テーブルデータ(2027,'20120814','20120915','A'). テーブルデータ(2028,'20120814','20121004','A'). テーブルデータ(2029,'20120814','20120817','A'). テーブルデータ(2030,'20120814','20120915','A'). テーブルデータ(2031,'20120814','20120930','A'). テーブルデータ(2032,'20120814','20121006','A'). テーブルデータ(2033,'20120814','20120916','A'). テーブルデータ(2034,'20120814','20120816','A'). テーブルデータ(2035,'20120814','20120827','A'). テーブルデータ(2036,'20120814','20121001','A'). テーブルデータ(2037,'20120814','20120830','A'). テーブルデータ(2038,'20120814','20121004','A'). テーブルデータ(2039,'20120814','20121009','A'). テーブルデータ(2040,'20120814','20120913','A'). テーブルデータ(2041,'20120814','20120922','A'). テーブルデータ(2042,'20120814','20120904','A'). テーブルデータ(2043,'20120814','20120823','A'). テーブルデータ(2044,'20120814','20120815','A'). テーブルデータ(2045,'20120814','20120918','A'). テーブルデータ(2046,'20120815','20120824','A'). テーブルデータ(2047,'20120816','20121004','A'). テーブルデータ(2048,'20120816','20121011','A'). テーブルデータ(2049,'20120816','20120824','A'). テーブルデータ(2050,'20120816','20120927','A'). テーブルデータ(2051,'20120816','20120909','A'). テーブルデータ(2052,'20120816','20120822','A'). テーブルデータ(2053,'20120816','20121010','A'). テーブルデータ(2054,'20120816','20120829','A'). テーブルデータ(2055,'20120816','20121009','A'). テーブルデータ(2056,'20120816','20120912','A'). テーブルデータ(2057,'20120816','20120820','A'). テーブルデータ(2058,'20120816','20121012','A'). テーブルデータ(2059,'20120816','20121006','A'). テーブルデータ(2060,'20120816','20120929','A'). テーブルデータ(2061,'20120816','20121005','A'). テーブルデータ(2062,'20120817','20120924','A'). テーブルデータ(2063,'20120817','20120820','A'). テーブルデータ(2064,'20120817','20120830','A'). テーブルデータ(2065,'20120817','20121010','A'). テーブルデータ(2066,'20120817','20121002','A'). テーブルデータ(2067,'20120817','20120818','A'). テーブルデータ(2068,'20120817','20120911','A'). テーブルデータ(2069,'20120817','20120911','A'). テーブルデータ(2070,'20120817','20120831','A'). テーブルデータ(2071,'20120817','20120912','A'). テーブルデータ(2072,'20120817','20120912','A'). テーブルデータ(2073,'20120817','20121005','A'). テーブルデータ(2074,'20120817','20121012','A'). テーブルデータ(2075,'20120817','20120913','A'). テーブルデータ(2076,'20120817','20121011','A'). テーブルデータ(2077,'20120817','20121002','A'). テーブルデータ(2078,'20120817','20120910','A'). テーブルデータ(2079,'20120817','20120820','A'). テーブルデータ(2080,'20120817','20120906','A'). テーブルデータ(2081,'20120817','20120926','A'). テーブルデータ(2082,'20120817','20120819','A'). テーブルデータ(2083,'20120817','20120901','A'). テーブルデータ(2084,'20120817','20121009','A'). テーブルデータ(2085,'20120817','20121004','A'). テーブルデータ(2086,'20120817','20120921','A'). テーブルデータ(2087,'20120818','20121002','A'). テーブルデータ(2088,'20120818','20120913','A'). テーブルデータ(2089,'20120818','20120913','A'). テーブルデータ(2090,'20120818','20120914','A'). テーブルデータ(2091,'20120818','20120930','A'). テーブルデータ(2092,'20120818','20120822','A'). テーブルデータ(2093,'20120818','20120917','A'). テーブルデータ(2094,'20120818','20121005','A'). テーブルデータ(2095,'20120818','20121007','A'). テーブルデータ(2096,'20120818','20120826','A'). テーブルデータ(2097,'20120818','20120928','A'). テーブルデータ(2098,'20120818','20120902','A'). テーブルデータ(2099,'20120818','20120920','A'). テーブルデータ(2100,'20120818','20121012','A'). テーブルデータ(2101,'20120818','20120928','A'). テーブルデータ(2102,'20120818','20121008','A'). テーブルデータ(2103,'20120818','20121001','A'). テーブルデータ(2104,'20120818','20120917','A'). テーブルデータ(2105,'20120818','20120829','A'). テーブルデータ(2106,'20120818','20120918','A'). テーブルデータ(2107,'20120818','20120826','A'). テーブルデータ(2108,'20120819','20120915','A'). テーブルデータ(2109,'20120819','20120916','A'). テーブルデータ(2110,'20120819','20120903','A'). テーブルデータ(2111,'20120819','20120909','A'). テーブルデータ(2112,'20120819','20120924','A'). テーブルデータ(2113,'20120819','20120819','A'). テーブルデータ(2114,'20120820','20120831','A'). テーブルデータ(2115,'20120820','20121001','A'). テーブルデータ(2116,'20120820','20121013','A'). テーブルデータ(2117,'20120820','20120918','A'). テーブルデータ(2118,'20120820','20120820','A'). テーブルデータ(2119,'20120820','20120910','A'). テーブルデータ(2120,'20120820','20120824','A'). テーブルデータ(2121,'20120820','20120824','A'). テーブルデータ(2122,'20120820','20121002','A'). テーブルデータ(2123,'20120820','20121011','A'). テーブルデータ(2124,'20120821','20121011','A'). テーブルデータ(2125,'20120821','20120923','A'). テーブルデータ(2126,'20120821','20120823','A'). テーブルデータ(2127,'20120821','20120906','A'). テーブルデータ(2128,'20120821','20120910','A'). テーブルデータ(2129,'20120821','20120926','A'). テーブルデータ(2130,'20120821','20121019','A'). テーブルデータ(2131,'20120821','20121016','A'). テーブルデータ(2132,'20120821','20121018','A'). テーブルデータ(2133,'20120821','20120831','A'). テーブルデータ(2134,'20120821','20120918','A'). テーブルデータ(2135,'20120821','20120827','A'). テーブルデータ(2136,'20120821','20120927','A'). テーブルデータ(2137,'20120821','20121015','A'). テーブルデータ(2138,'20120821','20120924','A'). テーブルデータ(2139,'20120821','20121004','A'). テーブルデータ(2140,'20120821','20120906','A'). テーブルデータ(2141,'20120821','20120831','A'). テーブルデータ(2142,'20120821','20121005','A'). テーブルデータ(2143,'20120821','20120915','A'). テーブルデータ(2144,'20120821','20120903','A'). テーブルデータ(2145,'20120821','20120909','A'). テーブルデータ(2146,'20120821','20120901','A'). テーブルデータ(2147,'20120821','20120925','A'). テーブルデータ(2148,'20120821','20120910','A'). テーブルデータ(2149,'20120821','20120914','A'). テーブルデータ(2150,'20120822','20120907','A'). テーブルデータ(2151,'20120822','20120829','A'). テーブルデータ(2152,'20120822','20120915','A'). テーブルデータ(2153,'20120822','20120825','A'). テーブルデータ(2154,'20120822','20121011','A'). テーブルデータ(2155,'20120822','20121010','A'). テーブルデータ(2156,'20120822','20120828','A'). テーブルデータ(2157,'20120822','20120828','A'). テーブルデータ(2158,'20120822','20120901','A'). テーブルデータ(2159,'20120822','20120925','A'). テーブルデータ(2160,'20120823','20121020','A'). テーブルデータ(2161,'20120823','20120924','A'). テーブルデータ(2162,'20120823','20120831','A'). テーブルデータ(2163,'20120823','20120918','A'). テーブルデータ(2164,'20120823','20120930','A'). テーブルデータ(2165,'20120823','20121007','A'). テーブルデータ(2166,'20120824','20120828','A'). テーブルデータ(2167,'20120824','20120923','A'). テーブルデータ(2168,'20120824','20120914','A'). テーブルデータ(2169,'20120824','20120831','A'). テーブルデータ(2170,'20120824','20120831','A'). テーブルデータ(2171,'20120824','20121001','A'). テーブルデータ(2172,'20120824','20120913','A'). テーブルデータ(2173,'20120824','20120911','A'). テーブルデータ(2174,'20120824','20121012','A'). テーブルデータ(2175,'20120824','20121010','A'). テーブルデータ(2176,'20120824','20121001','A'). テーブルデータ(2177,'20120824','20120906','A'). テーブルデータ(2178,'20120824','20120912','A'). テーブルデータ(2179,'20120824','20121010','A'). テーブルデータ(2180,'20120825','20120929','A'). テーブルデータ(2181,'20120825','20121014','A'). テーブルデータ(2182,'20120825','20120827','A'). テーブルデータ(2183,'20120825','20120918','A'). テーブルデータ(2184,'20120825','20121012','A'). テーブルデータ(2185,'20120825','20120825','A'). テーブルデータ(2186,'20120825','20120920','A'). テーブルデータ(2187,'20120825','20120916','A'). テーブルデータ(2188,'20120825','20120831','A'). テーブルデータ(2189,'20120825','20120919','A'). テーブルデータ(2190,'20120825','20121010','A'). テーブルデータ(2191,'20120825','20120831','A'). テーブルデータ(2192,'20120825','20121007','A'). テーブルデータ(2193,'20120826','20121016','A'). テーブルデータ(2194,'20120826','20121022','A'). テーブルデータ(2195,'20120826','20120916','A'). テーブルデータ(2196,'20120826','20120908','A'). テーブルデータ(2197,'20120826','20120905','A'). テーブルデータ(2198,'20120826','20120923','A'). テーブルデータ(2199,'20120826','20120907','A'). テーブルデータ(2200,'20120826','20121014','A'). テーブルデータ(2201,'20120826','20121005','A'). テーブルデータ(2202,'20120826','20120926','A'). テーブルデータ(2203,'20120826','20120925','A'). テーブルデータ(2204,'20120826','20120923','A'). テーブルデータ(2205,'20120826','20120827','A'). テーブルデータ(2206,'20120826','20121001','A'). テーブルデータ(2207,'20120826','20121012','A'). テーブルデータ(2208,'20120826','20121013','A'). テーブルデータ(2209,'20120826','20121013','A'). テーブルデータ(2210,'20120826','20120917','A'). テーブルデータ(2211,'20120826','20120926','A'). テーブルデータ(2212,'20120826','20121008','A'). テーブルデータ(2213,'20120826','20121003','A'). テーブルデータ(2214,'20120826','20120914','A'). テーブルデータ(2215,'20120826','20121008','A'). テーブルデータ(2216,'20120826','20120831','A'). テーブルデータ(2217,'20120826','20120929','A'). テーブルデータ(2218,'20120827','20120918','A'). テーブルデータ(2219,'20120827','20120908','A'). テーブルデータ(2220,'20120827','20121013','A'). テーブルデータ(2221,'20120827','20121023','A'). テーブルデータ(2222,'20120827','20120925','A'). テーブルデータ(2223,'20120827','20120927','A'). テーブルデータ(2224,'20120827','20121020','A'). テーブルデータ(2225,'20120827','20121016','A'). テーブルデータ(2226,'20120827','20121010','A'). テーブルデータ(2227,'20120827','20121023','A'). テーブルデータ(2228,'20120827','20120914','A'). テーブルデータ(2229,'20120827','20121023','A'). テーブルデータ(2230,'20120828','20121025','A'). テーブルデータ(2231,'20120828','20120917','A'). テーブルデータ(2232,'20120828','20120905','A'). テーブルデータ(2233,'20120828','20120923','A'). テーブルデータ(2234,'20120828','20120918','A'). テーブルデータ(2235,'20120828','20121011','A'). テーブルデータ(2236,'20120828','20120902','A'). テーブルデータ(2237,'20120828','20120830','A'). テーブルデータ(2238,'20120828','20120922','A'). テーブルデータ(2239,'20120828','20120916','A'). テーブルデータ(2240,'20120828','20120930','A'). テーブルデータ(2241,'20120828','20120905','A'). テーブルデータ(2242,'20120828','20121025','A'). テーブルデータ(2243,'20120828','20121011','A'). テーブルデータ(2244,'20120828','20121010','A'). テーブルデータ(2245,'20120828','20121022','A'). テーブルデータ(2246,'20120828','20120907','A'). テーブルデータ(2247,'20120829','20120907','A'). テーブルデータ(2248,'20120829','20120921','A'). テーブルデータ(2249,'20120829','20120902','A'). テーブルデータ(2250,'20120829','20120904','A'). テーブルデータ(2251,'20120829','20121020','A'). テーブルデータ(2252,'20120829','20121003','A'). テーブルデータ(2253,'20120829','20121021','A'). テーブルデータ(2254,'20120829','20121010','A'). テーブルデータ(2255,'20120829','20120918','A'). テーブルデータ(2256,'20120829','20121018','A'). テーブルデータ(2257,'20120829','20120829','A'). テーブルデータ(2258,'20120829','20120907','A'). テーブルデータ(2259,'20120829','20120926','A'). テーブルデータ(2260,'20120829','20121018','A'). テーブルデータ(2261,'20120829','20120927','A'). テーブルデータ(2262,'20120829','20121004','A'). テーブルデータ(2263,'20120829','20120915','A'). テーブルデータ(2264,'20120829','20121010','A'). テーブルデータ(2265,'20120829','20120919','A'). テーブルデータ(2266,'20120829','20120912','A'). テーブルデータ(2267,'20120829','20121012','A'). テーブルデータ(2268,'20120829','20121006','A'). テーブルデータ(2269,'20120829','20121002','A'). テーブルデータ(2270,'20120829','20120907','A'). テーブルデータ(2271,'20120829','20121006','A'). テーブルデータ(2272,'20120829','20120922','A'). テーブルデータ(2273,'20120830','20120920','A'). テーブルデータ(2274,'20120830','20120918','A'). テーブルデータ(2275,'20120830','20121025','A'). テーブルデータ(2276,'20120830','20121007','A'). テーブルデータ(2277,'20120830','20120919','A'). テーブルデータ(2278,'20120830','20120918','A'). テーブルデータ(2279,'20120830','20121012','A'). テーブルデータ(2280,'20120830','20120925','A'). テーブルデータ(2281,'20120830','20120902','A'). テーブルデータ(2282,'20120830','20120917','A'). テーブルデータ(2283,'20120830','20120918','A'). テーブルデータ(2284,'20120830','20121014','A'). テーブルデータ(2285,'20120830','20120929','A'). テーブルデータ(2286,'20120830','20120831','A'). テーブルデータ(2287,'20120830','20121006','A'). テーブルデータ(2288,'20120830','20120930','A'). テーブルデータ(2289,'20120830','20120928','A'). テーブルデータ(2290,'20120830','20120927','A'). テーブルデータ(2291,'20120830','20121021','A'). テーブルデータ(2292,'20120830','20120905','A'). テーブルデータ(2293,'20120830','20121006','A'). テーブルデータ(2294,'20120830','20121004','A'). テーブルデータ(2295,'20120830','20120918','A'). テーブルデータ(2296,'20120830','20121012','A'). テーブルデータ(2297,'20120830','20120918','A'). テーブルデータ(2298,'20120831','20120917','A'). テーブルデータ(2299,'20120831','20120929','A'). テーブルデータ(2300,'20120831','20120927','A'). テーブルデータ(2301,'20120831','20121003','A'). テーブルデータ(2302,'20120831','20120915','A'). テーブルデータ(2303,'20120831','20121010','A'). テーブルデータ(2304,'20120831','20121014','A'). テーブルデータ(2305,'20120831','20120911','A'). テーブルデータ(2306,'20120831','20120919','A'). テーブルデータ(2307,'20120831','20120904','A'). テーブルデータ(2308,'20120831','20121001','A'). テーブルデータ(2309,'20120831','20121024','A'). テーブルデータ(2310,'20120831','20120923','A'). テーブルデータ(2311,'20120831','20120926','A'). テーブルデータ(2312,'20120831','20120904','A'). テーブルデータ(2313,'20120831','20121012','A'). テーブルデータ(2314,'20120831','20120912','A'). テーブルデータ(2315,'20120831','20120927','A'). テーブルデータ(2316,'20120831','20121006','A'). テーブルデータ(2317,'20120831','20121011','A'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/770 # # すまん、763です。具体的に言うと # 株価Tab(時刻、株価) # 為替Tab(時刻、ドル・円為替レート) # を株価のテーブルをメインにして # SELECT時刻、株価、ドル・円為替レート # にしたいんだけど株価と為替の時刻は当然一致していないけど、 # 株価の時刻からみて最新の為替レートを表示したいんです。 # よろしくおねがいします。 # # '時刻、株価、ドル・円為替レート'(_時刻,_株価_円,_ドル円為替レート) :- 株価(_時刻,_株価_ドル), 株価(_時刻,_株価_ドル,_株価_円,_ドル円為替レート). 株価(_時刻,_株価_ドル,_株価_円,_ドル円為替レート) :- findmax([_時刻_1,_ドル円為替レート],( 為替(_時刻_1,_ドル円為替レート), _時刻_1 @=< _時刻), [_,_ドル円為替レート]), _株価_円 is _ドル円為替レート * _株価_ドル. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/763 # # A Table # a1 a2 # -- -- # 1 A # 3 B # 5 C # 6 D # # B Table # b1 b2 # -- -- # 2 E # 4 F # 6 G # # を select で # a1 a2 b1 b2 # -- -- -- -- # 1 A null null # 3 B 2 E # 5 C 4 F # 6 D 6 G # # にしたいけど、どうしたらいいでしょうか? 'A テーブルの_a1をキーに、B テーブルの_b1が_aに等しいか最も近い小さな値である組と結合する。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める' :- 'A テーブルの_a1をキーに'(_a1,_a2), 'B テーブルの_b1が_aに等しいか最も近い小さな値である組と結合する。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'(_a1,_b1_b2). 'A テーブルの_a1をキーに'(_a1,_a2) :- 'A テーブル'(_a1,_a2). 'B テーブルの_b1が_aに等しいか最も近い小さな値である組と結合する。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'(_a1,_b1_b2) :- setof(_b1,[_b1,_b2,_a1] ^ ( 'B Table'(_b1,_b2), _b1 @=< _a1),L1), 'Lの最大値から_b1,_b2を見つける。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'(L1,B1,B2). 'Lの最大値から_b1,_b2を見つける。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'([],'','') :- !. 'Lの最大値から_b1,_b2を見つける。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'(L,B1,B2) :- findmax(B1,( member(B1,L)),MaxB1), findmax([MaxB1,B2],( 'B Table'(MaxB1,B2)),[B1,B2]). % findmax/3 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/763 # # A Table # a1 a2 # -- -- # 1 A # 3 B # 5 C # 6 D # # B Table # b1 b2 # -- -- # 2 E # 4 F # 6 G # # を select で # a1 a2 b1 b2 # -- -- -- -- # 1 A null null # 3 B 2 E # 5 C 4 F # 6 D 6 G # # にしたいけど、どうしたらいいでしょうか? 'A Table \n a1 a2 \n -- -- \n 1 A \n 3 B \n 5 C \n 6 D \n B Table \n b1 b2 \n -- -- \n 2 E \n 4 F \n 6 G \n を \n a1 a2 b1 b2 \n -- -- -- -- \n 1 A null null \n 3 B 2 E \n 5 C 4 F \n 6 D 6 G にしたい'(_a1,_a2,_b1,_b2) :- 'A テーブルの_aをキーにB テーブルの_b1が_aに等しいか最も近い小さな値である組と結合する。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める'. 'A テーブルの_aをキーにB テーブルの_b1が_aに等しいか最も近い小さな値である組と結合する。ただし対象組が見つからない時はBテーブルの二つのフィールドはnullで埋める' :- 'A Table'(_a1,_a2), 'B Table の中で _b1 の値が _a1 に等しいか最も近い組'(_a1,_b1,_b2). 'B Table の中で _b1 の値が _a1 に等しいか最も近い組'(_a1,B1,B2) :- setof(_b1,[_b1,_b2,_a1] ^ ( 'B Table'(_b1,_b2), _b1 @=< _a1),L1), '_b1の最大値'(L1,B1,B2). '_b1の最大値'(L,'','') :- 'L が[]の時はB1,B2はそれぞれnull'(L). '_b1の最大値'(L,B1,B2) :- findmax(B1,( member(B1,L)),MaxB1), findmax([MaxB1,B2],( 'B Table'(MaxB1,B2)),[B1,B2]) 'L が[]の時はB1,B2はそれぞれnull'([]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1337692704/70 # # 【 課題 】DB上に給与の支給テーブルがあります。 #       支店・部・課・社員番号・基本給・役職手当・残業時間 #       これらの情報をDBから読み込み、各支店ごとの部、課の合計、支店合計 #       総合計を求めなさい。最後に全ての合計を印字する事。 #       集計項目は基本給・役職手当・残業手当・総支給額の4項目とする。 # 【 形態 】1. Javaアプリケーション(main()で開始すること) # 【期限】6/17 午後20時 # 【Ver 】java version "1.7.0_02" # 【 補足 】 # 残業手当 =(基本給+役職手当)/160*1.2 # 総支給額 = 基本給+役職手当+残業手当 で計算します。 # # データベースの設定ですが # 支店varcher2(14)部varcher2(14)課varcher2(14)社員番号number(8)基本給number(20)役職手当number(20) # 残業時間number(20) # 一意キーは社員番号です # # 追試の追試課題です。 # 今晩がんばりますが、明日の21時にはメールで提出しないといけません。 # お力添えお願いします。 # 'DB上に給与の支給テーブルがあります。支店・部・課・社員番号・基本給・役職手当・残業時間、これらの情報をDBから読み込み、各支店ごとの部、課の合計、支店合計、総合計を求めなさい。 最後に全ての合計を印字する事。集計項目は基本給・役職手当・残業手当・総支給額の4項目とする。' :- 鍵ならびを生成(_支店候補,_支店_部候補,_支店_部_課候補), 支店の表示(_支店候補,_支店_部候補,_支店_部_課候補,_支店), fail; 総合計の表示. 支店の表示(_支店候補,_支店_部候補,_支店_部_課候補,_支店) :- member([_支店,_部],_支店_部候補), '支店,部の表示'(_支店_部候補,_支店_部_課候補,_支店,_部), fail. 支店の表示(_支店候補,_支店_部候補,_支店_部_課候補,_支店) :- '支店を鍵に集約'(_支店候補,_支店,_基本給,_役職手当,_残業手当,_総支給額), writef('支店集約: 支店=%t: 基本給=%t,役職手当=%t,残業手当%t,総支給額=%t\n',[_支店,_基本給,_役職手当,_残業手当,_総支給額]). '支店,部の表示'(_支店_部候補,_支店_部_課候補,_支店,_部) :- member([_支店,_部,_課],_支店_部_課候補), '支店,部,課の表示'(_支店_部_課候補,_支店,_部,_課), fail. '支店,部の表示'(_支店_部_課候補,_支店,_部) :- '支店,部を鍵に集約'(_支店_部候補,_支店,_部,_基本給,_役職手当,_残業手当,_総支給額), writef('支店・部集約: 支店=%t,部=%t: 基本給=%t,役職手当=%t,残業手当%t,総支給額=%t\n',[_支店,_部,_基本給,_役職手当,_残業手当,_総支給額]). '支店,部,課の表示'(_支店_部_課候補,_支店,_部,_課) :- '支店,部,課を鍵に集約'(_支店_部_課候補,_支店,_部,_課,_基本給,_役職手当,_残業手当,_総支給額), writef('支店・部・課集約: 支店=%t,部=%t,課=%t: 基本給=%t,役職手当=%t,残業手当%t,総支給額=%t\n',[_支店,_部,_課,_基本給,_役職手当,_残業手当,_総支給額]). 鍵ならびを生成(_支店候補,_支店_部候補,_支店_部_課候補) :- '支店を鍵'(_支店候補), '支店,部を鍵'(_支店_部候補), '支店,部,課を鍵'(_支店_部_課候補). '支店を鍵'(_支店候補) :- setof([_支店],[_支店,_部,_課,_社員番号,_基本給,_役職手当] ^ ( 給与(_支店,_,_,_社員番号,_基本給,_役職手当)),_支店候補). '支店,部を鍵'(_支店_部候補) :- setof([_支店,_部],[_支店,_部,_課,_社員番号,_基本給,_役職手当] ^ ( 給与(_支店,_部,_課,_社員番号,_基本給,_役職手当)),_支店_部候補). '支店,部,課を鍵'(_支店_部_課候補) :- setof([_支店,_部,_課],[_支店,_部,_課,_社員番号,_基本給,_役職手当] ^ ( 給与(_支店,_部,_課,_社員番号,_基本給,_役職手当)),_支店_部候補). '支店,部,課を鍵に集約'(_支店_部_課候補,_支店,_部,_課,_基本給,_役職手当,_残業手当,_総支給額) :- member([_支店,_部,_課],_支店_部_課候補), findsum([_基本給,_役職手当,_残業手当,_総支給額],( 給与(_支店,_部,_課,_社員番号,_基本給,_役職手当), _残業手当と総支給額の算出(_基本給,_役職手当,残業手当,_総支給額)), [_基本給,_役職手当,_残業手当,_総支給額]). '支店,部を鍵に集約'(_支店_部候補,_支店,_部,_基本給,_役職手当,_残業手当,_総支給額) :- member([_支店,_部],_支店_部候補), findsum([_基本給,_役職手当,_残業手当,_総支給額],( 給与(_支店,_部,_,_社員番号,_基本給,_役職手当), _残業手当と総支給額の算出(_基本給,_役職手当,残業手当,_総支給額)), [_基本給,_役職手当,_残業手当,_総支給額]). '支店を鍵に集約'(_支店候補,_支店,_基本給,_役職手当,_残業手当,_総支給額) :- member([_支店],_支店候補), findsum([_基本給,_役職手当,_残業手当,_総支給額],( 給与(_支店,_,_,_社員番号,_基本給,_役職手当), _残業手当と総支給額の算出(_基本給+_役職手当,残業手当,_総支給額)), [_基本給,_役職手当,_残業手当,_総支給額]). すべての合計(_基本給,_役職手当,_残業手当,_総支給額) :- findsum([_基本給,_役職手当,_残業手当,_総支給額],( 給与(_,_,_,_社員番号,_基本給,_役職手当), _残業手当と総支給額の算出(_基本給+_役職手当,残業手当,_総支給額)), [_基本給,_役職手当,_残業手当,_総支給額]). 残業手当と総支給額の算出(_基本給,_役職手当,_残業手当,_総支給額) :- 残業手当の算出(_基本給,_役職手当,_残業手当), 総支給額の算出(_基本給,_役職手当,_残業手当,_総支給額). 残業手当の算出(_基本給,_役職手当,_残業手当) :- _残業手当 is (_基本給+_役職手当)/160*1.2. 総支給額の算出(_基本給,_役職手当,_残業手当,_総支給額) :- _総支給額 is _基本給+_役職手当+_残業手当. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/729 # # DBはSQLiteを想定してますが、MySQLでもpostgreSQLでも全然かまいません # # # 採取リスト # |番号|名称|コード|登録日|登録者|公開| # # というテーブルがあります。 # イメージとして、とある物体がありまして、登録者が各自で次々と登録していきます。 # 各物体には登録者の間で共有されていてぶれのないコード(A-0001とか)があるものの、 # 名称に関しては、ある程度の裁量があるため、登録者によって表記にぶれが起きます。 # # |番号|名称 |コード | 登録日  |登録者|公開| # |01  |クラゲ |A-001|2012/6/1 | 田中 | 1  | # |02  |くらげ |A-001 |2012/6/2 | 鈴木 | 0  | # |03  |海月 |A-001 |2012/6/3 | 佐藤 | 1  | # |04  |クラゲ |A-001|2012/6/4 | 高橋 | 0  | # |05  |ひとで |A-002|2012/6/5 | 小林 | 0  | # # 番号はオートナンバーで主キー。 # 登録日はそのままINSERTされた日。 # 告知フラグは0か1で、外部に公開されていたら1です。 # # んで、ここから公開されてない行を抜き出すビューを作りたいんです。 # CREATE VIEW 未公開リスト (番号, 名称, コード) # AS SELECT 番号, 名称, コード FROM 採取リスト WHERE 公開 = 0 # みたいなSQLを走らせると、 # # |番号|名称  |コード| # |02  |くらげ |A-001| # |04  |クラゲ |A-001| # |05  |ひとで |A-002| # # という風になってしまいますが「くらげ」と「クラゲ」で実質的に重複してしまいます。 # これを例えば「コードを基準にして重複がないように選んだ」上で、 # 名称には、特定の登録者の名称を用いてまとめることはできないのでしょうか? # 単に、DISTINCTを使うだけでは無理なようですが・・・。 # # 未公開リスト(_番号,_名称,_コード) :- '「コードを基準にして重複がないように選んだ」上で、名称には、特定の登録者の名称を用いてまとめる'(_番号,_名称,_コード). '「コードを基準にして重複がないように選んだ」上で、名称には、特定の登録者の名称を用いてまとめる'(_番号,_名称,_コード) :- 名称を登録者で置換したコードならび(_名称を登録者で置換したコードならび), 採取リスト(_番号,_名称_1,_コード,_登録日,_登録者,0), 名称を選択(_コード,_名称_1,_名称を登録者で置換したコードならび,_名称). 名称を登録者で置換したコードならび(_重複するコードならび) :- setof(_コード,[_番号,_名称,_コード,_登録日,_登録者,_公開] ^ ( 採取リスト(_番号,_名称,_コード,_登録日,_登録者,_公開)),L1), setof([_コード,_名称],[_番号,_名称,_コード,_登録日,_登録者,_公開] ^ ( 採取リスト(_番号,_名称,_コード,_登録日,_登録者,_公開)),L2), 名称を登録者で置換したコードならび(L1,L2,_重複するコードならび),!. 名称を登録者で置換したコードならび(L1,L2,名称を登録者で置換したコードならび) :- findall([_コード,_],( member(_コード,L1), count(member([_コード,_],L2),_度数)), _度数 > 1),_重複するコードならび), 名称を早い者勝ちに登録者名に決定する(_重複するコードならび,名称を登録者で置換したコードならび),!. 名称を早い者勝ちに登録者名に決定する([]). 名称を早い者勝ちに登録者名に決定する([[_コード,_登録者]|R]) :- 採取リスト(_番号,_名称,_コード,_登録日,_登録者,_公開), 名称を早い者勝ちに登録者名に決定する(R). 名称を選択(_コード,_,_名称を登録者で置換したコードならび,_名称) :- member([_コード,_名称],_名称を登録者で置換したコードならび),!. 名称を選択(_コード,_名称,_,_名称) :- \+(member([_コード,_],_名称を登録者で置換したコードならび)). % 以下のサイトは # # abcd というPrologのお題が、最終的にa,b,c,dという述語に分割可能だとする。 # その時に、abcd:-abc,d. と abcd:-a,bc,d.とabcd:-ab,cd.とabcd:-a,bcd.と # abcd:-ab,c,d.とabcd:-a,b,cd.とabcd:-a,b,c,d.のどれを選ぶか?何に導かれて選ぶのか? # # 実際の仕様文が「リストに入力して変換した上で整列して出力する」であるとして、 # # 考えてみよう。各パターンの先頭にトップレベルの分割を示す。 % % 共通のデータベース リストに入力して(_リスト) :- read(_リスト). 変換した上で([],[]). 変換した上で([A|R1],[B|R2]) :- B is A + 10000, 変換した上で(R1,R2). 整列して(_リスト,_整列したリスト) :- sort(_リスト,_整列したリスト). 出力する(_変換した上で整列したリスト) :- writef('%t\n',[_変換した上で整列したリスト]). a. b. c. d. %% 分割パターン(1-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して変換した上(_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). リストに入力して変換した上(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). abcd :- abc, d. abc :- ab, c. ab :- a, b. %% 分割パターン(1-2) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト). リストに入力して変換した上(_変換したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- abc, d. abc :- a, bc. bc :- b, c. %% 分割パターン(1-3) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で整列して(_変換した上で整列したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- abc, d. abc :- a, b, c. %% 分割パターン(2-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). 変換した上で整列して(_リスト,_変換した上で整列したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- a, bc, d. bc :- b, c. %% 分割パターン(3-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して出力する(_変換したリスト). リストに入力して変換した上で(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- ab, bc. ab :- a, b. cd :- c, d. %% 分割パターン(4-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト,_変換した上で整列したリスト) :- 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). 変換した上で整列して(_リスト,_変換した上で整列したリスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト). abcd :- a, bcd. bcd :- bc, d. bc :- b, c. %% 分割パターン(4-2) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト) :- 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, bcd. bcd :- b, cd. cd :- c, d, %% 分割パターン(4-3) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). 変換した上で整列して出力する(_リスト) :- 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換したリスト). abcd :- a, bcd. bcd :- b, c, d. %% 分割パターン(5-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). 整列して出力する(_変換したリスト) :- 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, cd. cd :- c, d. %% 分割パターン(6-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). リストに入力して変換した上で(_変換したリスト) :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト). abcd :- ab, c, d. ab :- a, b. %% 分割パターン(7-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, c, d. % 以下のサイトは # # abcd というPrologのお題が、最終的にa,b,c,dという述語に分割可能だとする。 # その時に、abcd:-abc,d. と abcd:-a,bc,d.とabcd:-ab,cd.とabcd:-a,bcd.と # abcd:-ab,c,d.とabcd:-a,b,cd.とabcd:-a,b,c,d.のどれを選ぶか?何に導かれて選ぶのか? # # 実際の仕様文が「リストに入力して変換した上で整列して出力する」であるとして、 # # 考えてみよう。各パターンの先頭にトップレベルの分割を示す。 # % 詳細化版 % % 共通のデータベース a. b. c. d. %% 分割パターン(1-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で整列して(_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- abc, d. abc :- ab, c. ab :- a, b. %% 分割パターン(1-2) %% abcd :- abc, d. abc :- a, bc. bc :- b, c. %% 分割パターン(1-3) %% abcd :- abc, d. abc :- a, b, c. %% 分割パターン(2-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, bc, d. bc :- b, c. %% 分割パターン(3-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して出力する(_変換したリスト). abcd :- ab, bc. ab :- a, b. cd :- c, d. %% 分割パターン(4-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で整列して出力する(_リスト). abcd :- a, bcd. bcd :- bc, d. bc :- b, c. %% 分割パターン(4-2) %% abcd :- a, bcd. bcd :- b, cd. cd :- c, d, %% 分割パターン(4-3) %% abcd :- a, bcd. bcd :- b, c, d. %% 分割パターン(5-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して出力する(_変換したリスト). abcd :- a, b, cd. cd :- c, d. %% 分割パターン(6-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して変換した上で(_変換したリスト), 整列して(_リスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- ab, c, d. ab :- a, b. %% 分割パターン(7-1) %% リストに入力して変換した上で整列して出力する :- リストに入力して(_リスト), 変換した上で(_リスト,_変換したリスト), 整列して(_変換したリスト,_変換した上で整列したリスト), 出力する(_変換した上で整列したリスト). abcd :- a, b, c, d. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/710 # # # 質問です。。 # ・Postgresql 9 # ・テーブルデータはざっくりですが、以下のような感じです。 # # table_name # # id | state | name | pride # ------+-------+-----------+---------------- # 1 | 2 | hoge1 | 01 # 2 | 1 | hoge2 | 02 # 15 | 2 | hoge3 | 02,03 # 16 | 1 | hoge4 | 02,04,05 # 33 | 1 | hoge5 | 04 # 34 | 1 | hoge6 | 01,05 # 35 | 1 | hoge7 | 01,02,03 # 36 | 1 | hoge8 | 01,02,03,04 # # 実際は、もっとレコード数が多いと思っておいてください。 # # ・やりたい事 # ランダムに10件、とかselectして表示させたいのですが、 # state = 1 # である事が絶対条件で、 # なおかつ # pride # の、 # 「01」が含まれるものの中から10件、ランダムに抽出 # 「02」が含まれるものの中から10件、ランダムに抽出 # ・・・以下、実際のデータでは20位まで続きます。 # # ・・・といった内容を、出来るだけ簡潔に書こうと思うと、どんな方法があるでしょうか? # # ちなみに、最終的にはidとnameを表示させるだけ、 # phpでWEBに表示させます。 # # SELECT id,name FROM table_name WHERE state = 1 AND pride LIKE '%01%' ORDER BY RANDOM() LIMIT 10 # # これで「01」が含まれるものの中から10件、ランダムに抽出・・・ # はできるのですが、コレを20回って・・・と思いますし、 # SELECT id,name FROM table_name WHERE state = 1 # で全部出力して配列に突っ込んでからソートしなおす、 # というのもあまりスマートでないような気がして。。。 # # 良い方法ないでしょうか。 # 'ランダムに10件、とかselectして表示させたいのですが、state = 1である事が絶対条件で、なおかつprideの、「01」が含まれるものの中から10件、ランダムに抽出、「02」が含まれるものの中から10件、ランダムに抽出・・・以下、実際のデータでは20位まで続きます。'(_pride_の優先順位20位までのならび,_id,_name) :- member(_pride,_pride_の優先順位20位までのならび), '10件取り出す'(_pride,_id,_name). '10件取り出す'(_pride,_id,_name) :- findall([_id,_name],( table_name(_id,1,_name,_pride)), LL_1), 乱順処理(LL_1,_id,_name). 乱順処理(LL_1,_id,_name) :- length(LL_1,_要素数), length(Ln,10), 乱順処理(Ln,_要素数,LL_1,LL_2), member([_id,_name],LL_2). 乱順処理([],_,_,[]) :- !. 乱順処理(_,0,_,[]) :- !. 乱順処理([_|Ln],_要素数,LL_1,[L|R]) :- 乱数を使って候補節を取り出す(_要素数,LL_1,L,_残り要素数,LL_2), 乱順処理(Ln,_残り要素数,LL_2,R). 乱数を使って候補節を取り出す(_要素数,LL_1,[_id,_name],_残り要素数,LL_2) :- _乱数 is random(_要素数), length(L0,_乱数), append(L0,[[_id,_name]|R0],LL_1), append(L0,R0,LL_2), _残り要素数 is _要素数 - 1. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/706 # # Oracleです # # テーブルA # 列a,列b,列c # # テーブルB # 列m,列n # # テーブルC # 列s,列t # # WHERE # 列b=列s or (列c=列m and 列n=列s) # # で全列出力したいんですけど列b=列sでマッチすると列Bが全レコード結合されてしまいます # 前者でマッチした時は列mと列nは出力しないようにしたいです # AとCは基本的に全列出力されるので、Bだけを条件によって出力されなかったりするJOINって作れますか # # '列b=列sでマッチした時は列mと列nは出力しないようにしたい。AとCは基本的に全列出力されるので、Bだけを条件によって出力されなかったりするJOIN'([_列a,_列b,_列c,_列s,_列t]) :- _列b = _列s, テーブルA(_列a,_列b,_列c), テーブルC(_列s,_列t). '列b=列sでマッチした時は列mと列nは出力しないようにしたい。AとCは基本的に全列出力されるので、Bだけを条件によって出力されなかったりするJOIN'([_列a,_列b,_列c,_列m,_列n,_列s,_列t]) :- _列c = _列m, _列n = _列s, テーブルA(_列a,_列b,_列c), テーブルB(_列m,_列n), テーブルC(_列s,_列t). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #598 # ../test/read.cgi/db/1316769778/597 # すいませんお世話になります。 # # $recordSetは繰り返し処理で処理しをしようと思っています。 # 今後です(笑 # # 2件しかデータは入れていないですが、 # # idオートインクル # # id/day/game # # 1 / 2012/03/26 / 勝ち # 2 / 2012/04/26 / 負け # # # です。 # # ちなみに # SELECT COUNT(*) FROM fx WHERE day LIKE "%2012/03/%" AND game LIKE "%勝ち%" # で実行すると # COUNT 1 と出ます。 # # SELECT COUNT(*) FROM fx WHERE day LIKE "%2012/04/%" AND game LIKE "%勝ち%" # で実行すると # COUNT 0 と出ます。 # # これを踏まえて %ここ% この中身に変数を入れたらいいんだという # 安易な考えなのですが、 # # <?php print "{$game_s}"; ?> # これを実行したら Arrayと出ました。 # # どうでしょうか? # # fx(1,'2012/03/26',勝ち). fx(2,'2012/04/26',負け). 'SELECT COUNT(*) FROM fx WHERE $条件1 AND $条件2'(_id,_day,_game,_条件1,_条件2,_度数) :- count((fx(_id,_day,_game),_条件1,_条件2),_度数). count(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). ?- 'SELECT COUNT(*) FROM fx WHERE $条件1 AND $条件2'(_id,_day,_game,_game=勝ち,sub_atom(_day,0,4,_,'2015'),_度数). _度数 = 0. % 以下のサイトは の索引 # I'm having some problems in prolog... again I need to make a function that receives three lists: elementsToRemove fullList nonRepeatedElements The function should be this as follows: # # removeRepeatedElements(elementsToRemove, fullList, nonRepeatedElements) # where nonRepeatedElements is a list without any element that is in elementsToRemve AND fullList. Can anyone please help! Kind of desperate over here. ahah # 重複された要素を取り除く([],[],[]). 重複された要素を取り除く(L1,[_要素|R2],[_要素|R3]) :- 重複要素(_要素,R2,L1_1,R2_2) 重複された要素を取り除く(L2,R2_2,R3) append(L1_1,L2,L1). 重複要素(_,[],[],[]) :- !. 重複要素(A,[A|R2],[A|R3],R4) :- 重複要素(A,R2,R3,R4),!. 重複要素(A,[B|R2],R3,[B|R4]) :- 重複要素(A,R2,R3,R4). % 以下のサイトは # I'm trying to figure out how to generate a list of sets, where each set has a length of N and the sum of each set is X. # # I found this code: # # num_split(0,[]). # num_split(N, [X | List]):- # between(1,N,X), # plus(X,Y,N), # num_split(Y,List). # And I can use that to get a list of sets with sum X: # # num_split(6,List),length(List,5). # List = [1, 1, 1, 1, 2] ; # List = [1, 1, 1, 2, 1] ; # List = [1, 1, 2, 1, 1] ; # List = [1, 2, 1, 1, 1] ; # List = [2, 1, 1, 1, 1] ; # false. # The problem is that those are all permutations, and I'm looking for combinations. The output I'm looking for should be something like get_combos(Sum,Length,List): # # get_combos(6,2,List). # List = [5,1]; # List = [4,2]; # List = [3,3]; # false. # Any pointers? # 重複組み合わせの合計(_重複組み合わせの合計,_要素数,_重複組み合わせ) :- _出現する最大数 is _重複組み合わせの合計 - _要素数 + 1, findall(N,( between(1,_出現する最大数,N)), _1から出現する最大数までのならび), 重複組合せ(_1から出現する最大数までのならび,_要素数,_重複組み合わせ), sum(_重複組み合わせ,_重複組み合わせの合計). % 重複組合せ/3 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1294641578/939 # # 下記の図に示すリレーション社員と部門の属性所属と部門番号上の統合結合演算を、 # リレーション社員と部門の属性所属と部門番号上の大なり結合演算に # 書き直したらどうなりますか????? # # 社員[所属=部門番号]部門 # # |社員.社員番号 | 社員.社員名 | 社員.給与| 社員.所属|部門.部門番号|部門.部門名|部門.部門長| # | 0650 | 鈴木一郎 | 50 | K55 | K55 | データベース| 0650 | # | 1508 | 浜崎アユ | 40 | K41 | K41 | ネットワーク | 1508 | # | 0231 | うたを | 60 | K41 | K41 | ネットワーク | 1508 | # | 2034 | 別所さん | 40 | K55 | K55 | データベース| 0650 | # 社員('0650','鈴木一郎','50','K55'). 社員('1508','浜崎アユ','40','K41'). 社員('0231','うたを','60','K41'). 社員('2034','別所さん','40','K55'). 所属('K55','データベース','0650'). 所属('K41','ネットワーク','1508'). 'リレーション社員と部門の属性所属と部門番号上の大なり結合演算'(_社員番号,_社員名,_給与,_所属,_部門番号,_部門名,_部門長) :- 社員(_社員番号,_社員名,_給与,_所属), 所属(_部門番号,_部門名,_部門長), _所属 @> _部門番号. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/689 # # すみません。 # 高専機械科卒なんですがお願いいたします。 # # 以下のようなテーブルにて、あかさたなでGROUP BYしてそれぞれの件数を出力できないかどうか悩んでおります。 # # CREATE TABLE `name_list` ( # kanji varchar(64), # yomi varchar(64) # ) # # INSERT INTO name_list (kanji,yomi) VALUES # ('安部','あべ'), # ('井口','いぐち'), # ('臼井','うすい'), # ('江本','えもと'), # ('小川','おがわ'), # ('柿本','かきもと'), # ('木島','きじま'), # ('九条','くじょう'), # ('毛森','けもり'), # ('小島','こじま'), # ('佐藤','さとう'), # ('しみず','')・・・・・・ # # 勿論、各頭文字で一件ずつじゃないのですが # これを # # あ行 5件 # か行 5件 # さ行 8件 # # のように集計をかけたいと思っておりますが # よい方法が思いつかず… # # 出力結果は、例でして出力した左側のフィールドはなんでもOKです。 # 右側のあかさたな行のそれぞれのレコード数がチェックできればOKです。 # # なにとぞよろしくお願いいたします。 # 名簿(安部,あべ). 名簿(井口,いぐち). 名簿(臼井,うすい). 名簿(江本,えもと). 名簿(小川,おがわ). 名簿(柿本,かきもと). 名簿(木島,きじま). 名簿(九条,くじょう). 名簿(毛森,けもり). 名簿(小島,こじま). 名簿(佐藤,さとう). 名簿(しみず,''). '各頭文字で一件ずつじゃないのですが、これを あ行 5件 か行 5件 さ行 8件 のように集計をかけたい'(_行,_件数) :- append(_,[_行,_次の行|_],[あ,か,さ,た,な,は,ま,や,ら,わ,ん]), count((名簿(_,_ひらがな読み),_ひらがな読み @>= _行,_ひらがな読み @< _次の行),_件数). % 以下のサイトは # I'm making META-FORMS game in prolog # # The game consists in pieces and clues. I have a border and clues to restrict the places where I can put the pieces in border. # # Board: the board consist in a matrix 3x3 # # Top: Top/left top/middle top/right # center: center/left center/middle center/right # bottom: bottom/left bottom/middle bottom/right # Pieces example: piece(triangle, blue). -> A blue triangle ; # # Clue example: put(piece(square, yellow), top, right, Board). -> this is a direct clue telling me that I must put one square yellow on the top right position of the board. # # This is the code for the basic examples: # # put(P, top, left, [P,_,_,_,_,_,_,_,_]). # put(P, top, middle, [_,P,_,_,_,_,_,_,_]). # put(P, top, right, [_,_,P,_,_,_,_,_,_]). # put(P, center, left, [_,_,_,P,_,_,_,_,_]). # put(P, center, middle, [_,_,_,_,P,_,_,_,_]). # put(P, center, right, [_,_,_,_,_,P,_,_,_]). # put(P, bottom, left, [_,_,_,_,_,_,P,_,_]). # put(P, bottom, middle, [_,_,_,_,_,_,_,P,_]). # put(P, bottom, right, [_,_,_,_,_,_,_,_,P]). # In this advance level I have this input: # # matrixNeg(piece(triangle, blue), # [(top, right), # (center, middle), # (center, right), # (bottom, left), # (bottom, middle), # (bottom, right)], # Board). # First I recieve a piece, then a border with positions I CAN'T put the piece, then the game border to put it. # # I can't figure it out how can I do this. How can I, from restricted positions on the first boarder, make available the other position on the game boarder, # put(P, top, left, [_,P2,P3,P4,P5,P6,P7,P8,P9],[P,P2,P3,P4,P5,P6,P7,P8,P9]). put(P, top, middle, [P1,_,P3,P4,P5,P6,P7,P8,P9],[P1,P,P3,P4,P5,P6,P7,P8,P9]). put(P, top, right, [P1,P2,_,P4,P5,P6,P7,P8,P9],[P1,P2,P,P4,P5,P6,P7,P8,P9]). put(P, center, left, [P1,P2,P3,_,P5,P6,P7,P8,P9],[P1,P2,P3,P,P5,P6,P7,P8,P9]). put(P, center, middle, [P1,P2,P3,P4,_,P6,P7,P8,P9],[P1,P2,P3,P4,P,P6,P7,P8,P9]). put(P, center, right, [P1,P2,P3,P4,P5,_,P7,P8,P9],[P1,P2,P3,P4,P5,P,P7,P8,P9]). put(P, bottom, left, [P1,P2,P3,P4,P5,P6,_,P8,P9],[P1,P2,P3,P4,P5,P6,P,P8,P9]). put(P, bottom, middle, [P1,P2,P3,P4,P5,P6,P7,_,P9],[P1,P2,P3,P4,P5,P6,P7,P,P9]). put(P, bottom, right, [P1,P2,P3,P4,P5,P6,P7,P8,_],[P1,P2,P3,P4,P5,P6,P7,P8,P]). matrixNeg(Element,[],Board,Board). matrixNeg(Element,[(Position_1,Position_2)|R],Board_1,Board) :- put(Element,Position_1,Position_2,Board_1,Board_2), matrixNeg(Element,R,Board_2,Board). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/666 # # SQLite3を使っています。 # # カラムがなかったらinsert # あったらupdateしたいのですが、 # どういうSQLをかけばいいのでしょうか? # # insert into t1(c1, c2) values("hoge",10) # update t1 set c2=10 WHERE c1="hoge" # このときc1はuniqueです。 # # よろしくお願いします。 # # 'カラムがなかったらinsert あったらupdateしたい'(_テーブル,_カラムならび,_鍵カラム,_鍵値) :- findall(_カラム,( テーブル定義(_テーブル,_番目,_カラム)), L1), 鍵値をセットする(_テーブル,_鍵カラム,_鍵値,P), 'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび). 鍵値をセットする(_テーブル,L1,_鍵カラム,_鍵値,P) :- length(L1,Len), length(L2,Len), nth1(Nth,L1,_鍵カラム), nth1(Nth,L2,_鍵値), P =.. [_テーブル|L2]. 'カラムがなかったらinsert あったらupdateしたい'(P,_テーブル,_カラムならび) :- call(P),!, ( retract(P), Q =.. [_テーブル|_カラムならび], asserta(Q), fail; true). 'カラムがなかったらinsert あったらupdateしたい'(_,_テーブル,_カラムならび) :- Q =.. [_テーブル|_カラムならび], asserta(Q). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/662 # # MySQL5 # # 開始日、終了日を持ったテーブルを日付単位に表示したいです。 # tbl_job は、以下の構造です。 # # id, name, start_date, end_date # --------------------------- # 1, JOB1, 2012-04-01, 2012-04-03 # 2, JOB2, 2012-04-02, 2012-04-04 # # 上記テーブルから以下のように日付単位でJOBを表示するSQLを教えてほしいです。 # # date, id, name # -------------------- # 2012-04-01, 1, JOB1 # 2012-04-02, 1, JOB1 # 2012-04-02, 2, JOB2 # 2012-04-03, 1, JOB1 # 2012-04-03, 2, JOB2 # 2012-04-04, 2, JOB2 # # '開始日、終了日を持ったテーブルを日付単位に表示したい' :- 日付単位tbl_jobの生成(_日付単位tbl_jobならび), findsetof(_日付,( member([_date,_,_],_日付単位tbl_jobならび)), _日付ならび), 日付単位に表示する(_日付ならび,_日付単位tbl_jobならび). 日付単位tbl_jobの生成(_日付単位tbl_jobならび) :- findall(_日付,( tbl_job(_id,_name,_start_date,_end_date), 日付の生成(_start_date,_end_date,_日付)), _日付単位tbl_jobならび). 日付の生成(_終了年-_終了月-_終了日,_終了年-_終了月-_終了日,_終了年-_終了月-_終了日) :- !. 日付の生成(_開始年-_開始月-_開始日,_終了年-_終了月-_終了日,_開始年-_開始月-_開始日). 日付の生成(_開始年-_開始月-_開始日,_終了年-_終了月-_終了日,_年-_月-_日) :- 翌日(_開始年,_開始月,_開始日,_翌日年,_翌日月,_翌日日), 日付の生成(_翌日年-_翌日月-_翌日日,_終了年-_終了月-_終了日,_年-_月-_日). 翌日(_年,12,31,_翌年,1,1) :- !. 翌日(_年,_月,30,_年,_翌月,1) :- member(_月,[4,6,9,11]), _翌月 is _月 + 1,!. 翌日(_年,_月,31,_年,_翌月,1) :- _翌月 is _月 + 1,!. 翌日(_年,2,29,_年,3,1) :- !. 翌日(_年,2,28,_年,3,1) :- \+(うるう年(_年)), 翌日(_年,_月,_日,_年,_月,_翌日) :- _翌日 is _日 + 1. うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail. 日付単位に表示する(_日付ならび,_日付単位tbl_jobならび) :- member(_日付,_日付ならび), member([_日付,_id,_name],_日付単位tbl_jobならび), 日付の形式を整えながら一行表示する(_日付,_id,_name), fail. 日付単位に表示する(_日付ならび,_日付単位tbl_jobならび). 日付の形式を整えながら一行表示する(_年-_月-_日,_id,_name) :- swritef(S,'%2r-%2r-%2r',[_年-_月-_日]), 空白を0に置換した日付文字列(S,_空白を0に置換した日付文字列), writef('%t, %t, %t\n',[_空白を0に置換した日付文字列,_id,_name). 空白を0に置換した日付文字列(S,_空白を0に置換した日付文字列) :- findall(_文字_2,( sub_atom(S,_,1,_,_文字), 空白を0に置換(_文字,_文字_2)), _空白を0に置換した日付文字列). 空白を0に置換(' ','0') :- !. 空白を0に置換(A,A). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #649 # SQLというよりテーブル設計の質問なんですがいいでしょうか? # # ユーザごとの日々変化するデータを1日1レコードずつ保存するために # 以下のようなテーブル構造を考えました。 # # USERSテーブル #  user_no (ユーザ番号 PK) #  latest_gen_no (最新世代番号) #  氏名その他の属性 # # RECORDSテーブル #  user_no (ユーザ番号 PK*) #  gen_no (世代番号 PK*) #  日々変化する値 # *user_no, gen_no のペアでPK # # GENERATIONSテーブル #  gen_no (世代番号 PK) #  date (日時) # # 全ユーザの最新世代の値を取得するべく、 # select ... from users u, records r # where u.user_no=r.user_no and u.latest_gen_no=r.gen_no; # というSQLを発行すると、ものすごく時間が掛かります。 # # PKやインデックスの設定の仕方に問題があるのでしょうか? # そもそもテーブルの構成がまずいでしょうか? # テーブル副目標(_テーブル名,_引数ならび,_属性名ならび,_副目標) :- findall(_,テーブル定義(_テーブル名,_,_属性名),_引数ならび), 属性名ならびを得る(_テーブル名,_属性名ならび), _副目標 =.. [_テーブル名|_引数ならび]. 属性名ならびを得る(_テーブル名,_属性名ならび) :- setof([_属性順位,_属性名],[_テーブル名,_属性順位,_属性名] ^ テーブル定義(_テーブル名,_属性順位,_属性名),_属性順位_属性名ならび), findall(_属性名,member([_,_属性名],_属性順位_属性名ならび),_属性名ならび). 'USERSテーブルを最新世代に更新する' :- ユーザごとの現在の最新世代を得る(_ユーザごとの最新世代ならび), 'USERSテーブルを更新する'(_ユーザごとの最新世代ならび). ユーザごとの現在の最新世代を得る(_ユーザごとの最新世代ならび) :- 'テーブル副目標'('USERS',[_ユーザ番号,_最新世代番号|_氏名その他の属性],_,_USERS), findsetof(_ユーザ番号,_USERS,_対象ユーザ番号ならび), ユーザごとの現在の最新世代を得る(_対象ユーザ番号ならび,_ユーザごとの最新世代ならび). ユーザごとの現在の最新世代を得る([],[]). ユーザごとの現在の最新世代を得る([_ユーザ番号|R1],[[_ユーザ番号,_最新世代番号]|R2]) :- テーブル副目標('RECORDS',[_ユーザ番号,_世代番号|_],_,_RECORDS), findmax([_日時,_世代番号],( 'USERSテーブルの日時、世代番号'(_RECODRS,_世代番号,_日時)),[_,_最新世代番号]), ユーザごとの現在の最新世代を得る(R1,R2). 'USERSテーブルの日時、世代番号'(_RECODRS,_世代番号,_日時) :- _RECORDS, 'GENERATIONS'(_世代番号,_日時). 'USERSテーブルを更新する'([]). 'USERSテーブルを更新する'([[_ユーザ番号,_最新世代番号]|R]) :- 'テーブル副目標の最新世代番号情報を更新する'(_ユーザ番号,_最新世代番号), 'USERSテーブルを更新する'(R),!. 'テーブル副目標の最新世代番号情報を更新する'(_ユーザ番号,_最新世代番号) :- テーブル副目標('USERS',[_ユーザ番号,_|_氏名その他の属性],_,_USERS_1), テーブル副目標('USERS',[_ユーザ番号,_最新世代番号|_氏名その他の属性],_,_USERS_2), 'USERSテーブルの更新'(_USERS_1,_USERS_2). 'USERSテーブルの更新'(_USERS_1,_USERS_2) :- retract(_USERS_1), assertz(_USERS_2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/647 # # #インデントが崩れる場合は http://ime.nu/pastebin.com/26BkXDHs をみてください。 # # -- # -- 商品テーブルと、 # -- # create table items ( # id serial primary key, # name varchar(255) not null, # price integer not null -- 単価 # ); # # -- # -- 販売テーブルがあるとする。 # -- # create table sales ( # id serial primary key, # item_id integer not null references items(id), # count integer not null default 1, -- 個数 # total integer not null, -- 単価 * 個数 # created_at timestamp not null default current_datetime # ) # # -- # -- 日付を指定して、その日の商品別販売金額合計を大きい順に表示したい。 # -- どういうSQLを書けばいいの? # -- こんなかんじで書けたらいいんだけど。 # -- # select items.id, items.name # from items, # (select item_id, sum(total) as sum_total # from sales # where date(created_at) = '2012-04-01' # group by item_id) as totals # where items.id = totals.item_id # order by totals.sum_total desc; # # '日付を指定して、その日の商品別販売金額合計を大きい順に表示したい' :- '日付を指定して、'(_日付), その日の商品別販売金額合計を(_日付,L1), 大きい順に表示する(L1). '日付を指定して、'(_日付) :- write('日付を8桁の整数で入力して下さい : '), get_line(Line), '日付を指定して、の診断'(Line,_日付),!. '日付を指定して、'(_日付) :- '日付を指定して、'(_日付). '日付を指定して、の診断'(Line,_日付) :- atom_to_term(Line,_8桁の整数,_), '8桁の整数'(_8桁の整数), '8桁の整数から日付を得る'(_8桁の整数,_日付),!. '日付を指定して、の診断'(Line,_日付) :- writef('入力された %t からは日付が得られませんでした。再入力をお願いします\n',[Line]), fail. '8桁の整数'(_8桁の整数) :- integer(_8桁の整数), _8桁の整数 >= 10000000, _8桁の整数 =< 99999999. '8桁の整数から日付を得る'(_8桁の整数,_日付) :- swritef(_日付文字列,'%t',[_8桁の整数]), sub_atom(_日付文字列,0,4,_,_年), sub_atom(_日付文字列,4,2,_,_月), sub_atom(_日付文字列,6,2,_,_日), atomic_list_concat([_年,'-',_月,'-',_日],_日付),!. その日の商品別販売金額合計を(_日付,L1) :- findsetof(_id,( sales(_id,_item_id,_count,_total,_日付)), L), findall([_total,_id],( append(_,[_id|R],L), 商品の販売合計(_日付,_id,_合計金額)), L1). 商品の販売合計(_日付,_id,_合計金額) :- findsum(_total,( sales(_id,_item_id,_count,_total,_日付)), _合計金額). 大きい順に表示する(L1) :- 大きい順に(L1,L2), 表示する(L2). 大きい順に(L1,L2) :- sort(L1,L3), reverse(L3,L2). 表示する(_日付,[]). 表示する(_日付,[[_合計金額,_id]|R]) :- items(_id,_name,_price), writef('%t %t %20l %10r\n',[_日付,_id,_name,_合計金額]), 表示する(_日付,R). % 以下のサイトは # For my program I need to make a list of lists, with each sublist containing 2 numbers, X and Y along with the sum and product of these 2 numbers. # So far I have the following: # # genList(95, X,[]):-!. # genList(N, X,[[X,Y,Sum,Product]|Xs]):- # Y is N+1, # Sum is X+Y, # Sum<101, # Product is X*Y, # N1 is N+1, # genList(N1, X,Xs). # This works just fine for my test case of genList(5,5,Q). # However, I'm having trouble making it work for any starting number. # # The goal is to find every pair of numbers where sum<= 100. # So running through the above for one starting value, X would find every pair 1 < X < Y, where sum<=100, # and running through it with all numbers 2-N would give a complete list of possible pairs. # # For those interested, the problem I'm working through is the sum/product problem, described here (Second on the page) # # If anyone could help with this it would be greatly appreciated! # # Also, no built in prolog predicates are able to be used, hence the complicated way of doing this rather than with a findall. # # A small extract of the output produced by this predicated is as follows: # # [[5,6,11,30],[5,7,12,35],[5,8,13,40],[5,9,14,45],[5,10,15,50],[5,11,16,55],[5,12,17,60],[5,13,18,65],[5,14,19,70],[5,15,20,75],[5,16,21,80],[5,17,22,85],[5,18,23,90],[5,19,24,95],[5,20,25,100],[5,21,26,105],[5,22,27,110], ... # genList(_,95,[]) :- !. genList(N,X,L) :- genList(N,N,X,L). genList(N0,N,X,[[X,Y,Sum,Product]|Xs]):- Y is N+1, Sum is X+Y, Sum<101, Product is X*Y, N1 is N+1, genList(N0,N1,X,Xs),!. genList(N0,N,X,Xs):- X1 is X + 1, genList(N0,X1,Xs). % 以下のサイトは # # Prologの集約問題 # 述語体重が定義されている時、各節で定義されているメンバーの # 平均体重を求めるという問題だ。 # # 体重(島田,57). # 体重(服部,65). # 体重(内山,70). % % 最初に最も普通の定義を示す。 体重(島田,57). 体重(服部,65). 体重(内山,70). 平均体重(_平均体重) :- findall(_体重,体重(_,_体重),_メンバーの体重リスト), length(_メンバーの体重リスト,_人数), sum_list(_メンバーの体重リスト,_体重合計), _平均体重 is _体重合計 / _人数. % % Prologを単位節データとして使用する場合、以下のfindavg/3を使います。 % findavg/3 をライブラリに加えておきます。 % 体重(島田,57). 体重(服部,65). 体重(内山,70). 平均体重(_平均体重) :- findavg(_体重,体重(_,_体重),_平均体重). findavg(_集約項,_項,_算術平均) :- findall(_集約項,_項,_値リスト), sum_list(_値リスト,_合計値), length(_値リスト,_リストの長さ), _算術平均 is _合計値 / _リストの長さ,!. % % % 次の定義は体重データベースの構造を変更してしまう対処です。 % 定義自体を一引数増やして、有向グラフの述語表現にしてみます。 % 体重(島田,服部,57). 体重(服部,内山,65). 体重(内山,島田,70). 平均体重(_平均体重) :- 体重(_最初の人,_次の人,_最初の人の体重), 合計体重(_次の人,_最初の人,_人数,_合計体重), _平均体重 is _合計体重 / _人数,!. 合計体重(_最初の人,_最初の人,1,_最初の人の体重) :- 体重(_最初の人,_,_最初の人の体重). 合計体重(_前の人,_最初の人,_人数,_合計体重) :- 体重(_前の人,_次の人,_体重), 合計体重(_次の人,_最初の人,_人数_1,_合計体重_1), _合計体重 is _体重 + _合計体重_1, _人数 is _人数_1 + 1. % % 直ぐにわかることは、同姓が出てくると困る。 % それで、普通は名前でノードを構成することはせず、 % 所謂、IDを振ります。この振り方が大問題となりますが。 % ここではIDは a,b,8 を使っています。 % 体重(a,b,島田,57). 体重(b,8,服部,65). 体重(8,a,内山,70). 平均体重(_平均体重) :- 体重(_id,_id_1,_,_体重), 合計体重(_id_1,_id,_人数,_合計体重), _平均体重 is _合計体重 / _人数,!. 合計体重(_id,_id,1,_体重) :- 体重(_id,_,_,_体重),!. 合計体重(_id_1,_id,_人数,_合計体重) :- 体重(_id_1,_id_2,_,_体重), 合計体重(_id_2,_id,_人数_1,_合計体重_1), _合計体重 is _体重 + _合計体重_1, _人数 is _人数_1 + 1. % % もしIDが1を先頭とする連続した整数であることを維持できるのなら % 体重(1,島田,57). 体重(2,服部,65). 体重(3,内山,70). 平均体重(_平均体重) :- 合計体重(1,_人数,_合計体重), _平均体重 is _合計体重 / _人数. 合計体重(_id,_人数,_合計体重) :- 体重(_id,_,_体重), _id_2 is _id + 1, 合計体重(_id_2,_人数_2,_合計体重_2), _人数 is _人数_2 + 1, _合計体重 is _体重 + _合計体重_2,!. 合計体重(_,0,0). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/638 # # mysql 5.5.10 # # table hogehoge # inputdate data1 data2 data3 # 2012-02-16 ssssss wwwww yyyyyy # 2012-02-17 xxxxxx xxxxx xxxxx # 2012-02-18 null aaaaa vvvvv # 2012-02-19 null null null # 2012-02-20 null null null # 2012-02-21 null null null # 2012-02-22 xxxxxx ccccc fffff # # とある時に、指定日の前日のデータが欲しい # 例でいうなら # data1について、 # 2012-02-17を指定することによって2012-02-16のssssssを、 # 2012-02-22の日付を指定して2012-02-17のxxxxxxが得られ # るようにしたいのですが。 # # よろしくお願いします # 指定日の前日のデータが欲しい(_指定日,_指定日の前日,_data1,_data2,_data3) :- 指定日の前日(_指定日,_指定日の前日), hogehoge(_指定日の前日,_data1,_data2,_data3). 指定日の前日(_指定日,_指定日の前日) :- 指定日から年取得(_指定日,_年), 指定日から月取得(_指定日,_月), 指定日から日取得(_指定日,_日), 指定日の前日(_年,_月,_日,_指定日の前日). 指定日の前日(_年,'01','01',_指定日の前日) :- 前年(_年,_前年), atomic_list_concat([_前年,-,'12',-,'31'],_指定日の前日),!. 指定日の前日(_年,_月,'01',_指定日の前日) :- member(_月,['05','07','08','10','12']), 前月(_月,_前月), atomic_list_concat([_年,-,_前月,-,'30'],_指定日の前日),!. 指定日の前日(_年,_月,'01',_指定日の前日) :- member(_月,['02','04','06','09','11']), 前月(_月,_前月), atomic_list_concat([_年,-,_前月,-,'31'],_指定日の前日),!. 指定日の前日(_年,'03','01',_指定日の前日) :- atom_to_term(_年,_年整数,_), うるう年(_年整数), atomic_list_concat([_年,-,'02',-,'29'],_指定日の前日),!. 指定日の前日(_年,'03','01',_指定日の前日) :- atom_to_term(_年,_年整数,_), \+(うるう年(_年整数)), atomic_list_concat([_年,-,'02',-,'28'],_指定日の前日),!. 指定日の前日(_年,_月,_日,_指定日の前日) :- 二桁日文字列の前日文字列(_日,_前日文字列), atomic_list_concat([_年,-,_月,-,_前日文字列],_指定日の前日). 指定日から年取得(_指定日,_年) :- sub_atom(_指定日,0,4,_,_年). 指定日から月取得(_指定日,_月) :- sub_atom(_指定日,5,2,_,_月). 指定日から日取得(_指定日,_日) :- sub_atom(_指定日,8,2,_,_日). 前年(_年,_前年) :- atom_to_term(_年,_年整数), _前年整数 is _年整数 - 1, swritef(_前年,'%t',[_前年整数]). 前月('12','11'). 前月('11','10'). 前月('10','09'). 前月('09','08'). 前月('08','07'). 前月('07','06'). 前月('06','05'). 前月('05','04'). 前月('04','03'). 前月('03','02'). 前月('02','01'). 二桁日文字列の前日文字列('31','30'). 二桁日文字列の前日文字列('30','29'). 二桁日文字列の前日文字列('29','28'). 二桁日文字列の前日文字列('28','27'). 二桁日文字列の前日文字列('27','26'). 二桁日文字列の前日文字列('26','25'). 二桁日文字列の前日文字列('25','24'). 二桁日文字列の前日文字列('24','23'). 二桁日文字列の前日文字列('23','22'). 二桁日文字列の前日文字列('22','21'). 二桁日文字列の前日文字列('21','20'). 二桁日文字列の前日文字列('20','19'). 二桁日文字列の前日文字列('19','18'). 二桁日文字列の前日文字列('18','17'). 二桁日文字列の前日文字列('17','16'). 二桁日文字列の前日文字列('16','15'). 二桁日文字列の前日文字列('15','14'). 二桁日文字列の前日文字列('14','13'). 二桁日文字列の前日文字列('13','12'). 二桁日文字列の前日文字列('12','11'). 二桁日文字列の前日文字列('11','10'). 二桁日文字列の前日文字列('10','09'). 二桁日文字列の前日文字列('09','08'). 二桁日文字列の前日文字列('08','07'). 二桁日文字列の前日文字列('07','06'). 二桁日文字列の前日文字列('06','05'). 二桁日文字列の前日文字列('05','04'). 二桁日文字列の前日文字列('04','03'). 二桁日文字列の前日文字列('03','02'). 二桁日文字列の前日文字列('02','01'). うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/633 # # MySQL 5.1です。 # # create table staff_list( # staff_id int(5) primary key //社員番号 # staff_name varchar(8) //社員名 # unit varchar(8) primary key //部署名 # ) # # insert into staff_list (staff_id,staff_name,unit) values # (1,'範馬','総務'), # (2,'愚地','総務'), # (3,'花山','総務'), # (1,'高津','企画'), # (2,'池谷','企画'), # (3,'長嶋','企画'), # (1,'鳩山','営業'), # (2,'野田','営業'), # (3,'小沢','営業'), # (4,'枝野','営業') # # # # このようなテーブルに対してSELECTをかける際、一度のクエリーで # 部署別にソートしたうえで、総務だけstaff_id降順で他を昇順で出したいと思っています。 # # order by unit,IF(staff_name='総務',staff_id desc,staff_id asc) # などと試行してみているのですがうまくできません。 # # どなたかうまい方法をご存じないでしょうか。 # # よろしくお願いいたします。 # スタッフリスト(1,範馬,総務). スタッフリスト(2,愚地,総務). スタッフリスト(3,花山,総務). スタッフリスト(1,高津,企画). スタッフリスト(2,池谷,企画). スタッフリスト(3,長嶋,企画). スタッフリスト(1,鳩山,営業). スタッフリスト(2,野田,営業). スタッフリスト(3,小沢,営業). スタッフリスト(4,枝野,営業). 'このようなテーブルを選択する際、一度部署別にソートしたうえで、総務だけ社員番号降順で出したいと思っています。'(_部署名,_社員番号,_社員名) :- 一度部署別にソートしたうえで(_部署名ならび), 総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名). 一度部署別にソートしたうえで(_部署名ならび) :- findsetof(_部署名,( スタッフリスト(_社員番号,_社員名,_部署名)), _部署名ならび). 総務だけ社員番号降順で出したい(_部署名ならび,_部署名,_社員番号,_社員名) :- member(_部署名,_部署名ならび), 総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名). 総務だけ社員番号降順で出したい(総務,_社員番号,_社員名) :- 総務だけ社員番号降順で(_社員番号,_社員名). 総務だけ社員番号降順で出したい(_部署名,_社員番号,_社員名) :- \+(_部署名 == 総務), スタッフリスト(_社員番号,_社員名,_部署名). 総務だけ社員番号降順で(_社員番号,_社員名) :- findall([_社員番号,_社員名],( スタッフリスト(_社員番号,_社員名,総務)), L1), 降順でソート(L1,L2), member([社員番号,_社員名],L2). 降順でソート(L1,L2) :- sort(L1,L3), reverse(L3,L2). % % findsetof/3 % % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/628 # # Mysql5を使っています。以下のようなテーブルがある時、 # ・table_male(カラム:id/name/address) # ・table_female(カラム:id/name/address) # ・table_X(カラム:id/sex_id/sex/unique_key) ※sex_idはtable_male.idもしくはtable_female.id # # クエリA # select `sex`, `sex_id` from table_X where unique_key = $key limit 1; # の結果(sexの値にmaleかfemaleが返る)に応じて # table_maleもしくはtable_femaleからaddressを引き出したいと思います # 今まではクエリAのあとに以下のようにしていたんですが、両方をまとめてやることはできないでしょうか? # select `address` from table_male where `id`=$sex_id limit 1; # # 最初のクエリの取得結果に応じて、続けて実行するクエリの対象テーブルを変更させるということに # なると思うんですが… # よろしくお願いします # # 'select `sex`, `sex_id` from table_X where unique_key = $key limit 1; select `address` from table_male where `id`=$sex_id limit 1;'(_uniqkey,_address) :- table_x(_id,_sexid,_sex,_uniqkey), 'maleテーブルまたはfemaleテーブルを参照する'(_sex,_id,_name,_address). 'maleテーブルまたはfemaleテーブルを参照する'(male,_id,_name,_address) :- table_male(_id,_name,_address),!. 'maleテーブルまたはfemaleテーブルを参照する'(female,_id,_name,_address) :- table_female(_id,_name,_address),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/621 # # ■DBMS名とバージョン # MySQL 5.0 # # ■テーブルデータ # 店舗テーブル # AreaID      int(1)←この2つでキーになってます # TenpoID     int(1)←この2つでキーになってます # uriage       int(16) # # 社員テーブル # SyainNo      int(255) # AreaID       int(1) # TenpoID      int(1) # SyainName    varchar(256) # # ■欲しい結果 # # uriageが5000以下の店舗に属してる社員を抜き出す # のと # その社員をいっぺんに消す # # どのようにSQL文を書けばいいでしょうか? # % % この問題のように、findall/3を使って、単位節データベースから読み取る場合は % 単純にappend/3を使って解を組み上げていくのがよい。 % 'uriageが5000以下の店舗に属してる社員を抜き出す'(_uriageが5000以下の店舗に属してる社員Noと社員名ならび) :- 'uriageが5000以下の店舗'(_uriageが5000以下の店舗ならび), 'uriageが5000以下の店舗に属してる社員を抜き出す'(_uriageが5000以下の店舗,_uriageが5000以下の店舗に属してる社員Noと社員名ならび). 'uriageが5000以下の店舗に属してる社員を抜き出す'([],[]). 'uriageが5000以下の店舗に属してる社員を抜き出す'([[_AreaID,_TempoID]|R1],_uriageが5000以下の店舗に属してる社員Noと社員名ならび) :- 店舗に属してる社員(_AreaID,_TempoID,_店舗に属してる社員Noと社員名ならび), 'uriageが5000以下の店舗に属してる社員を抜き出す'(R1,_uriageが5000以下の店舗に属してる社員Noと社員名ならび_1), append(_店舗に属してる社員Noと社員名ならび,_uriageが5000以下の店舗に属してる社員Noと社員名ならび_1,_uriageが5000以下の店舗に属してる社員Noと社員名ならび). 'uriageが5000以下の店舗'(_uriageが5000以下の店舗ならび) :- findsetof([_AreaID,_TempoID],( 店舗(_AreaID,_TempoID,_uriage), _uriage =< 5000), _uriageが5000以下の店舗ならび). 店舗に属してる社員(_AreaID,_TempID,_店舗に属してる社員Noと社員名ならび) :- findall([_SyainNo,_SyainName],( 社員(_SyainNo,_AreaID,_TempoID,_SyainName)), _店舗に属してる社員Noと社員名ならび). 'uriageが5000以下の店舗に属してる社員を抜き出した上、その社員をいっぺんに消す' :- 'uriageが5000以下の店舗に属してる社員を抜き出す'(_uriageが5000以下の店舗に属してる社員Noと社員名ならび), append(_,[[_SyainNo,_SyainName]|R],_uriageが5000以下の店舗に属してる社員Noと社員名ならび), retract(社員(_SyainNo,_AreaID,_TempoID,_SyainName)), R = []. % findsetof/3 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/614 # # ・DBMS名とバージョン # MySQL # # ・テーブルデータ # 店舗(店舗ID 店舗名) # # 商品(商品ID 店舗ID 商品名) # (※同じ名前の商品が複数の店舗にあっても、別の商品として扱う) # # 売り上げ(売り上げID 商品ID 個数) # # ・欲しい結果 # 店舗名 商品名 売り上げ個数合計 # (※店舗名、商品名でソート) # # ・説明 # SELECT * FROM `店舗` ORDER BY `店舗名`; # この結果をプログラム側でループ # SELECT * FROM 商品 WHERE 店舗ID=? ORDER BY `商品名`; # さらにこの結果をループ # SELECT SUM(個数) FROM 売り上げ WHERE 商品ID=? # # これだと時間がかかりすぎるので、これを1つ、または2つのSQLにまとめたいです。 # # # SELECT *, SUM(`売り上げ`.個数`) AS `売り上げ個数合計` # FROM `商品` # LEFT JOIN `売り上げ` ON `商品`.`商品ID` = `売り上げ`.`商品ID` # WHERE `商品`.`店舗ID`=? # # とりあえず下2つだけでもまとめようとしてみたのですが、合計が商品毎ではなく店舗毎の合計になってしまいます。 # # # '店舗名・商品名を鍵として売り上げ個数合計を集約する'(_店舗名,_商品名,_売り上げ個数合計) :- '店舗名・商品名を鍵ならびとする'(LL1), '店舗名・消費名を鍵に売り上げ個数合計を集約する'(LL1,LL2), member([_店舗名,_商品名,_売り上げ個数合計],LL2). '店舗名・商品名を鍵ならびとする'(LL1) :- setof([_店舗名,_商品名],[_店舗ID,_店舗名,_商品ID,_商品名] ^ ( '店舗・商品から_店舗名,_商品名の対を得る'(_店舗ID,_店舗名)),LL1). '店舗・商品から_店舗名,_商品名の対を得る'(_店舗名,_商品名) :- 店舗(_店舗ID,_店舗名), 商品(_商品ID,_店舗ID,_商品名). '店舗名・消費名を鍵に売り上げ個数合計を集約する'(LL1,LL2) :- findall([_店舗名,_商品名,_売り上げ個数合計],( member([_店舗名,_商品名],LL1), 度数('店舗名・商品名を鍵に売り上げ'(_店舗名,_商品名),_売り上げ個数合計)),LL2). '店舗名・商品名を鍵に売り上げ'(_店舗名,_商品名) :- 店舗(_店舗ID,_店舗名), 商品(_商品ID,_店舗ID,_商品名). 度数(_目標,_度数) :- findall(1,_目標,L), length(L,_度数). % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #603 # MySQL # # テーブルデータにNo int(255)があります。 # # 現在Noには10000件のデータがあり追加や削除を繰り返しているので # 既にNo連続した数字にはなっていません。 # # 今回、取得したいのはNoが5000以上でNo小さい方から30件取得して # Noが大きい順に並べ替えて取得したいです。 # # この場合のSQLはどう書けばいいでしょうか? # # :- dynamic(テーブルデータ/1). 'Noが5000以上でNoの小さい方から30件取得してNoが大きい順に並べ替えて取得したいです。'(_No) :- 'Noが5000以上で'(_5000以上のNoならび), 'Noの小さい方から30件取得してNoが大きい順に並べ替えて'(_5000以上のNoならび,_小さい方から30件取得して大きい順に並べ替えたNoならび), 取得したい(_小さい方から30件取得して大きい順に並べ替えたNoならび,_No). 'Noが5000以上で'(_5000以上のNoならび) :- findall(_No,( 'Noが5000以上のデータを得る'(_No)),_5000以上のNoならび). 'Noが5000以上のデータを得る'(_No) :- テーブルデータ(_No), _No >= 5000. 'Noの小さい方から30件取得してNoが大きい順に並べ替えて'(_5000以上のNoならび,_小さい方から30件取得して大きい順に並べ替えたNoならび) :- 'Noの小さい方から30件取得して'(_5000以上のNoならび,L30), 'Noが大きい順に並べ替えて'(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび). 'Noの小さい方から30件取得して'(_5000以上のNoならび,L30) :- sort(_5000以上のNoならび,L2), length(L30,30), append(L30,_,L2). 'Noが大きい順に並べ替えて'(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび) :- reverse(L30,_小さい方から30件取得して大きい順に並べ替えたNoならび). 取得したい(_小さい方から30件取得して大きい順に並べ替えたNoならび,_No) :- member(_No,_小さい方から30件取得して大きい順に並べ替えたNoならび). テーブルデータの生成 :- length(Ln,10000), テーブルデータの生成(Ln). テーブルデータの生成([]) :- !. テーブルデータの生成(Ln) :- 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln). 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln) :- ランダムに得た数が(_ランダムに得た数), 初出の時はテーブルデータとして書き加えて行く(Ln,_ランダムに得た数). 'ランダムに得た数が初出の時はテーブルデータとして書き加え、既出の場合は無視する。'(Ln) :- テーブルデータの生成(Ln). ランダムに得た数が(_ランダムに得た数) :- _ランダムに得た数 is random(15000). 初出の時はテーブルデータとして書き加えて行く([_|Ln],_ランダムに得た数) :- 初出の時は(_ランダムに得た数), テーブルデータとして書き加えて行く(Ln,_ランダムに得た数). 初出の時は(_ランダムに得た数) :- \+(catch(テーブルデータ(_ランダムに得た数),E,fail)). テーブルデータとして書き加えて行く(Ln,_ランダムに得た数) :- assertz(テーブルデータ(_ランダムに得た数)), テーブルデータの生成(Ln). :- テーブルデータの生成. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/591 # # ・RDBMS # MySQL 5.1.6 # # ・テーブルデータ # aji_table //調味料テーブル # rank int(3) //表示順位 NULL許可 # name varchar(16) //調味料の品名 # price int(5) //調味料の値段 # # ・インサートされているデータ # NULL|さとう  |100 # 0   |しお   |200 # 3   |こしょう |300 # NULL|みそ   |400 # NULL|みりん  |500 # # ・欲しい結果 # 0   |しお   |200 # NULL|さとう  |100 # NULL|みそ   |400 # 3   |こしょう |300 # NULL|みりん  |500 # # # ・説明 # お世話になります。 # 上記にある調味料値段データベースにおいて # 表示順をソートする際に # ・順位に数字が入っているものは、一覧表示を行う際にその数字に応じた順位に出す。 # ・それ以外は、値段昇順で出力する。 # # というSELECT文が組めないものかと思っております。 # # 単純に値段順で表示したいんですけど、いくつかの商品は # 表示結果におけるその順番の位置を固定したい!という内容でして # 順位のフィールドをおいてなんとか解決しようとしているのですがうまく組めません。 # # 対応策を是非、ご教授頂ければと思います。 # # なお、そんなテーブルの組み方はダメだ、そういうときはこう組め!等もありましたら # ご教授お願いいたします。 # # # よろしくお願いいたします。 # # '順位に数字が入っているものは、一覧表示を行う際にその数字に応じた順位に、それ以外は、値段昇順で出力する。 単純に値段順で表示したいんですけど、いくつかの商品は表示結果におけるその順番の位置を固定したい'(_表示行) :- '順位に数字が入っているものは、一覧表示を行う際にその数字に応じた順位に'(_表示位置固定ならび), 'それ以外は、値段昇順で'(_表示位置自由ならび), 二つのならびを併合する(0,_表示位置固定ならび,_表示位置自由ならび,_表示ならび), member(_表示行,_表示ならび). '順位に数字が入っているものは、一覧表示を行う際にその数字に応じた順位に'(_表示位置固定ならび) :- findall([_表示位置,_調味料の値段,_調味料の品名],( 調味料テーブル(_表示位置,_調味料の品名,_調味料の値段), _表示位置>=0), _表示位置固定ならび). 'それ以外は、値段昇順で'(_表示位置自由ならび) :- findall([_調味料の値段,_調味料の品名,_表示位置],( 調味料テーブル(_表示位置,_調味料の品名,_調味料の値段), \+(_表示位置>=0)), _鍵順に並べ直した表示位置自由ならび), sort(_鍵順に並べ直した表示位置自由ならび,_整列した表示位置自由ならび), フィールド順を元に戻す(_整列した表示位置自由ならび,_表示位置自由ならび). 二つのならびを併合する(_,L1,[],L1). 二つのならびを併合する(_,[],L2,L2). 二つのならびを併合する(N,[[N,_調味料の品名,_調味料の値段]|R1],L2,[[N,_調味料の品名,_調味料の値段]|R3]) :- N_2 is N + 1, 二つのならびを併合する(N_2,R1,L2,R3),!. 二つのならびを併合する(N,L1,[[_表示位置,_調味料の品名,_調味料の値段]|R2],[[_表示位置,_調味料の品名,_調味料の値段]|R3]) :- N_2 is N + 1, 二つのならびを併合する(N_2,R1,L2,R3). フィールド順を元に戻す([],[]). フィールド順を元に戻す([[_調味料の値段,_調味料の品名,_表示位置]|R1],[[_表示位置,_調味料の品名,_調味料の値段]|R2]) :- フィールド順を元に戻す(R1,R2). % 以下のサイトは ?- 'a##'. # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/584 # # MySQL 5.5.19 . 長くなりますので # テーブルの定義・内容と欲しい結果はここに # http://ime.nu/codepad.org/oe1jhVrF # # で、 # # create table a_tbl( # code int(9) not null, # input_date date not null, # data1 double(9,2) unsigned default 0 not null, # data2 double(9,2) unsigned default 0 not null, # primary key(code,input_date) # ) ; # # insert into a_tbl # values # (1111,'2012-02-01',10,12), # (1111,'2012-02-02',133,14), # (1111,'2012-02-04',13,15), # (1111,'2012-02-06',13,10); # # create table b_tbl( # code varchar(10) not null, # input_date date not null, # data1 double(9,2) unsigned default 0 not null, # data2 double(9,2) unsigned default 0 not null, # primary key(code,input_date) # ) ; # # insert into b_tbl # values # ('ddd','2012-02-01',122,13), # ('ddd','2012-02-03',127,18), # ('ddd','2012-02-04',11,14), # ('ddd','2012-02-05',16,95), # ('ddd','2012-02-06',13,10); # # 欲しい結果 # input_date a.data1 a.data2 b.data2 # 2012-02-01 10 12 13 # 2012-02-02 133 14 null # 2012-02-03 null null 18 # 2012-02-04 13 15 14 # 2012-02-05 null null 95 # 2012-02-06 13 10 10 # # # select a.input_date,b.input_date,a.data1,a.data2,b.data2 # from a_tbl a # right join b_tbl b # on a.input_date = b.input_date; とすると、結果が # +------------+------------+-------+-------+-------+ # | input_date | input_date | data1 | data2 | data2 | # +------------+------------+-------+-------+-------+ # | 2012-02-01 | 2012-02-01 | 10 | 12 | 13 | # | NULL | 2012-02-03 | NULL | NULL | 18 | # | 2012-02-04 | 2012-02-04 | 13 | 15 | 14 | # | NULL | 2012-02-05 | NULL | NULL | 95 | # | 2012-02-06 | 2012-02-06 | 13 | 10 | 10 | # +------------+------------+-------+-------+-------+ # なんですが、実際にはいろんなコードが入っているので、コードも抽出条件に入れたら # select a.input_date,b.input_date,a.data1,a.data2,b.data2 # from a_tbl a # right join b_tbl b # on a.input_date = b.input_date # where # a.code=1111 and b.code='ddd'; # +------------+------------+-------+-------+-------+ # | input_date | input_date | data1 | data2 | data2 | # +------------+------------+-------+-------+-------+ # | 2012-02-01 | 2012-02-01 | 10 | 12 | 13 | # | 2012-02-04 | 2012-02-04 | 13 | 15 | 14 | # | 2012-02-06 | 2012-02-06 | 13 | 10 | 10 | # +------------+------------+-------+-------+-------+ # になってしまいました。 # コードを抽出条件に入れた状態で望ましい結果または上の方の結果になるようなSQLを教えて下さい。 # 'input_dateの集合を得る'(_input_dateの集合) :- findall(_input_date,a_tbl(_input_date,_,_),L1), findall(_input_date,b_tbl(_input_date,_,_),L2), append(L1,L2,L3), setof(_input_date,member(_input_date,L3),_input_dateの集合). 抽出(_input_date,_tbl_aのdata1ならび,_tbl_aのdata2ならび,_tbl_bのdata2ならび) :- 'input_dateの集合を得る'(_input_dateの集合), member(_input_date,_input_dateの集合), findall([_data1],tbl_a(_,_input_date,_data1,_),_tbl_aのdata1ならび), findall([_data2],tbl_a(_,_input_date,_,_data2),_tbl_aのdata2ならび), findall([_data2],tbl_b(_,_input_date,_,_data2),_tbl_bのdata2ならび). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/574 # # MySQLかPostgreSQLかMongoDBかSQLiteのいずれかで以下のことを実現するSQLを伝授してください # やりたいこと: id10とid11の間に新しいカラムを挿入する # # id 10のカラム みかん # id 11のカラム りんご # ↓ # id 10のカラム みかん # id 12のカラム 新しく挿入した箇所 # id 13のカラム りんご # :- dynamic(最も最新のid/1). 最も最新のid(11). 新しいid(_id) :- retract(最も最新のid(_id_0)), _id is _id_0 + 1, assertz(最も最新のid(_id)). 'id10とid11の間に新しいカラムを挿入する'(_新しく挿入される名前) :- idが10以上の節を削除しながら収集する(_節ならび), 新しいid(_新しいid), 新しい節を挿入して(_新しいid,_新しく挿入される名前), 残りの節にidを与えながら追加(_節ならび). idが10以上の節を削除しながら収集する(_節ならび) :- findall(table(_id,_名前),( table(_id,_名前), _id > 10), _節ならび), 節を全て削除する(_節ならび). 節を全て削除する([]). 節を全て削除する([P|R]) :- retract(P), 節を全て削除する(R). 新しい節を挿入して(_新しいid,_新しく挿入される名前) :- assertz(table(_新しいid,_新しく挿入される名前)). 残りの節にidを与えながら追加([]). 残りの節にidを与えながら追加([table(_,_名前)|R]) :- 新しいid(_id), assertz(table(_id,_名前)), 残りの節にidを与えながら追加(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/569 # # code | val # ------------ # A | 11 # A | 23 # A | 34 # A | 42 # B | 321 # B | 112 # B | 23 # B | 245 # というようなテーブルがあり、ここから # 同じcodeを持つ行が4行以上ある場合、val順で小さい方から3行残してのこりを削除 # したいのですが、SQL一発でできますか?DBMSはMySQLです。 # # ↓ほしい結果 # code | val # ------------ # A | 11 # A | 23 # A | 34 # B | 112 # B | 23 # B | 245 # # '同じcodeを持つ行が4行以上ある場合、val順で小さい方から3行残してのこりを削除したい' :- findsetof(_code,( table(_code,_)), _code候補ならび), append(_,[_code|R],_code候補ならび), 'code毎にvalの小さい順4位以下の組を'(_code,_4位以下の組ならび), '削除する'(_4位以下の組ならび), R = []. 'code毎にvalの小さい順4位以下の組を'(_code,_4位以下の組ならび) :- findall([_val,_code],( table(_code,_val)), L1), sort(L1,L2), 'valの小さい順4位以下の組'(L2,_4位以下の組ならび). 'valの小さい順4位以下の組'([_,_,_|R],R) :- !. 'valの小さい順4位以下の組'(_,[]). 削除する([]). 削除する([[A,B]|R]) :- retract(table(B,A)), 削除する(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/569 # # code | val # ------------ # A | 11 # A | 23 # A | 34 # A | 42 # B | 321 # B | 112 # B | 23 # B | 245 # というようなテーブルがあり、ここから # 同じcodeを持つ行が4行以上ある場合、val順で小さい方から3行残してのこりを削除 # したいのですが、SQL一発でできますか?DBMSはMySQLです。 # # ↓ほしい結果 # code | val # ------------ # A | 11 # A | 23 # A | 34 # B | 112 # B | 23 # B | 245 # # '同じcodeを持つ行が4行以上ある場合、val順で小さい方から3行残してのこりを削除したい' :- findsetof(_code,( table(_code,_)), _code候補ならび), append(_,[_code|R],_code候補ならび), 'code毎にvalの小さい順最大3件'(_code,L), '最大3件を書き戻す'(L), R = []. 'code毎にvalの小さい順最大3件'(_code,L) :- findall([_val,_code],( retract(table(_code,_val))), L1), sort(L1,L2), 'valの小さい順最大3件'(L1,L). 'valの小さい順最大3件'([],[]). 'valの小さい順最大3件'([[A1,B1],[A2,B2],[A3,B3]|_],[[B1,A1],[B2,A2],[B3,A3]]) :- !. 'valの小さい順最大3件'([[A,B]|R1],[[B,A]|R2]) :- 'valの小さい順最大3件'(R1,R2). '最大3件を書き戻す'([]). '最大3件を書き戻す'([[A,B]|R]) :- assertz(table(A,B)), '最大3件を書き戻す'(R). % 以下のサイトは # # Prologという宣言型プログラミング言語にふれる。ルールを定義するという点を除くと、 # 確かにSQL(データに対しこれ欲しいみたいなクエリ)に近しい感じがします。 # ということで、アクセスパス(性能)が気になるのは、命令型に侵されてるからかな? % % Prologの述語の定義節の間では基本的に情報の授受ができません。 % 具体的に示しましょう。 % 成績(阿部,70). 成績(尾崎,55). 成績(山田,90). % と定義されている時、三人の平均点を取りたいとします。(集約問題) ?- 成績(_,_成績). _ = 阿部, _成績 = 70; _ = 尾崎, _成績 = 55; _ = 山田, _成績 = 90; false % というように取得できますが、_ = _尾崎,_成績 = 55が取得できた時には阿部の % 情報は変数の束縛を開放してしまっていますから、利用できません。 % 個々の節が全く独立しているわけですから合計していくことができないことになります。 % ただし、以下のように情報が連鎖するように仕組めば可能になります。 % 成績(阿部,尾崎,70). 成績(尾崎,山田,55). 成績(山田,阿部,90). 成績の平均(_起点,_平均点) :- 成績(_起点,_生徒,_), 成績の合計(_起点,_生徒,_人数,_合計), _平均点 is _合計 / _人数. 成績の合計(_起点,_起点,1,_成績) :- 成績(_起点,_,_成績),!. 成績の合計(_起点,_生徒_1,_人数,_合計) :- 成績(_生徒_1,_生徒_2,_成績), 成績の合計(_起点,_生徒_2,_人数_2,_合計_2), _合計 is _合計_2 + _成績, _人数 is _人数_2 + 1. % と一応はできました。 % 実は集約するために必要な条件は情報の連鎖なのです。 % Prologで扱う連鎖構造の代表にリストがあります。 % ここでも、[70,55,90]というリストが欲しい。 % 成績という述語の節の中にある成績(点数)だけを抜き出してリストとしたい。 % これを実現するfindallというメタ述語がPrologには用意されています。 成績(阿部,70). 成績(尾崎,55). 成績(山田,90). 成績リスト(_成績リスト) :- findall(_成績,成績(_,_成績),_成績リスト). ?- 成績リスト(_成績リスト). _成績リスト = [70,55,90]; false % と成ります。 % % このfindallこそ SQL にそっくりですね。 % % assert/retractを繰り返しながらリストを成長させて行くほかない述語で % 通常のPrologのスタイルからは外れた述語です。メタ述語です。 % 成績の平均(_平均点) :- 成績リスト(_成績リスト), sum_list(_成績リスト,_合計), length(_成績リスト,_人数), _平均点 is _合計 / _人数. % sum_listは組込述語になっていますが、定義するとしたら、 sum_list([],0). sum_list([N|R],_合計) :- sum_list(R,_合計_2), _合計 is _合計_2 + N. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/550 # # 掲示板をつくっています。 # ・親投稿 #  └ 子投稿 #  └ 子投稿 # のように1つだけコメントができる仕様で、 # 親・子投稿は以下のテーブルに格納されます。 # post # - id(PK) # - parent_id(postのIDでこれが0なら親、その他INTなら子) # - その他、投稿に関する情報(タイトル、本文など) # 上記のようなテーブルから、 # 親投稿にぶらさがる子投稿をまとめて取得するのはSQLではどう書けばいいでしょうか? # # ちなみに現在は、WHERE parent_id = 0 で親を取得して、 # その後取得した各レコードのidがparent_idに入っている投稿をループして取得しています。 # なので、20個の投稿とコメント取得する場合、21個のSQLを発行してしまっています。 # これを1回で取ってきたいです。 # 親を指定して関連する投稿を全てとりだす(_parent_id,_親のその他投稿に関する情報,[_id,_parent_id,_その他投稿に関する情報]) :- 掲示板(_parent_id,0,_親のその他投稿に関する情報), 掲示板(_id,_parent_id,_その他投稿に関する情報). '親を指定して関連する投稿を全てとりだす。これを1回で取ってきたいです'(_親を指定して関連する投稿全て) :- findall([_id,_parent_id,_その他投稿に関する情報],( 親を指定して関連する投稿を全てとりだす(_parent_id,_親のその他投稿に関する情報,[_id,_parent_id,_その他投稿に関する情報])), _親を指定して関連する投稿全て). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1309076891/908 # # 【 課題 】ttp://www.dotup.org/uploda/www.dotup.org2712711.txt.html # 【 形態 】1. Javaアプリケーション(main()で開始) # 【 GUI  】制限なし # 【 期限 】3/8 0:00 # 【 Ver  】java version "1.7.0_02-ea" # 【 補足 】3/8が提出期限なので、それまでにどうかお願いいたします。 # # # 専門学校での課題です。 # 課題1については自力でできたのですが、ところどころわからないので、課題1から3をお願いします # # 課題2. # クラスHumanを作りなさい。フィールドは名前、身長、体重の3つとする。 そして、身長と体重が整数でも少数点でも設定できるようにメソッドを作ること。また、初期化時も整数でも少数点でも設定できるようにすること。さらにそのフィールドの値を表示するメソッドも持つこと(表示は小数点表示で統一してよい) # そして、そのクラスHumanをテストするクラスHumanTestを作り、実際にインスタンスを2つ作って、値を設定し、その値を表示するmainメソッドを作りなさい。 # プロジェクト名は「kadai2」、クラス名は「HumanTest」とする。 # データベース構造('Human',1,名前). データベース構造('Human',2,身長). データベース構造('Human',3,体重). フィールドの値を表示する(_関係名) :- フィールド名ならびを得る(_関係名,_フィールド名ならび), 'Human'(_名前,_身長,_体重), 併合する(_フィールド名ならび,[_名前,_身長,_体重],L), writef('Human:: %t=%t, %t=%t, %t=%t\n',L), fail. フィールドの値を表示する(_). '節を定義する'(_関係名) :- フィールド値の入力(_関係名,_フィールド名_フィールド値ならび), フィールド値の切り出し(_フィールド名_フィールド値ならび,_フィールド値ならび), P =.. [_関係名|_フィールド値ならび], assertz(P). フィールド値の切り出し([],[]). フィールド値の切り出し([[_,_フィールド値]|R1],[_フィールド値|R2]) :- フィールド値の切り出し(R1,R2). フィールド名ならびを得る(_関係名,_フィールド名ならび) :- findall([Nth,_フィールド名],( データベース構造(_関係名,Nth,_フィールド名)), L1), sort(L1,L2), フィールド名の切り出し(L2,_フィールド名ならび). フィールド名の切り出し([],[]). フィールド名の切り出し([[_,_フィールド名]|R1],[_フィールド名|R2]) :- フィールド名の切り出し(R1,R2). フィールド値の入力(_関係名,L,_フィールド名_フィールド値ならび) :- findall([_フィールド名,_フィールド値],( member([_,_フィールド名],L), フィールド値の入力(_関係名,_フィールド名,_フィールド値)), _フィールド名_フィールド値ならび). フィールド値の入力(名前,_名前) :- get_line(_名前). フィールド値の入力(身長,_身長) :- get_line(Line), 身長入力検査(Line,_身長),!. フィールド値の入力(体重,_体重) :- get_line(Line), 体重入力検査(Line,_体重),!. フィールド値の入力(_フィールド名,_値) :- フィールド値の入力(_フィールド名,_値). 身長入力検査(Line,_身長) :- atom_to_term(Line,_身長), number(_身長), _身長 > 0,!. 身長入力検査(Line,_身長) :- writef('入力された %t は身長を表しません。再入力をお願いします。\n',[Line]), fail. 体重入力検査(Line,_体重) :- atom_to_term(Line,_体重), number(_体重), _体重 > 0,!. 体重入力検査(Line,_体重) :- writef('入力された %t は体重を表しません。再入力をお願いします。\n',[Line]), fail. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/548 # # Master Table # id | type id # ------------ # 01 | 1 # 02 | 2 # 03 | 2 # 04 | 1 # 05 | 1 # 06 | 2 # # ・DBMS名とバージョン # mysql 5.1.44 # # ・テーブルデータ # Table A # id | name a # ------------ # 01 | aaa # 04 | bbb # 05 | ccc # # Table B # id | name b # ------------ # 02 | ddd # 03 | eee # 06 | fff # # ・欲しい結果 # Master Tableのtype idが1だとTable Aと、2だとTable BとJOINしたいんですけど、どう書けば良いんでしょうか? # # # 'Master Tableのtype idが1だとTable Aと、2だとTable BとJOINしたい'(_id,_type_id,_name) :- 'Master Table'(_id,_type_id), 'JOIN'(_id,_type_id,_name). 'JOIN'(_id,'1',_name_a) :- 'Table A'(_id,_name_a). 'JOIN'(_id,'2',_name_b) :- 'Table B'(_id,_name_b). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/489 # # MySQLです # # Year | Month # ------------ # 2012 | 1 # 2012 | 2 # 2012 | 3 # 2012 | 4 #  〜 略 〜 # 2012 | 10 # 2012 | 11 # 2012 | 12 # # の様なテーブルから「年度」を取得したいです。 # この場合は2011と2012を取得するにはどんなSQLを書けばよいでしょう? # IF文とか書く必要があるのであればプロシージャ作るのもOKです。 # # 'テーブルから「年度」を取得'(_年,_月,_年度) :- 年月(_年,_月), 年度(_年,_月,_年度). 年度(_年,_月,_年度) :- _月 >= 4, _月 =< 12, _年度 = _年,!. 年度(_年,_月,_年度) :- _年度 is _年 - 1. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/473 # # DBはMysql5です # # 記事 entry user_id , blog_id , title ,body # ユーザー user id status # 友人 friend send_user_id , get_user_id(sendが自分で、getが他人) # # があるとして # user.statusが管理者の時は無条件で記事を表示 # それ以外は友人と、自分の記事のみ表示 # という状況を考えてます # # SELECT * from ( ( entry join user on entry.user_id = user.id ) join friend on user.id = friend.get_user_id ) # where user.id = "自分のID" OR user.status = "管理者" OR friend.send_user_id = "自分のID" # # これでいけるかと思ったのですが、同じ記事が20個も30個も表示されてしまいます # どのように書けばいいでしょうか?よろしくおねがいします…… # # 'user.statusが管理者の時は無条件で記事を表示、それ以外は友人と、自分の記事のみ表示'(_id) :- entry(_user_id,_blog_id,_title,_body), user(_id,_status), 表示(_status,_id,_user_id,_blog_id,_title,_body), fail. 'user.statusが管理者の時は無条件で記事を表示、それ以外は友人と、自分の記事のみ表示'(_). 表示(_id,_status,_user_id,_blog_id,_title,_body) :- 'user.statusが管理者の時は無条件で記事を表示'(_status,_id,_user_id,_blog_id,_title,_body),!. 表示(_id,_status,_user_id,_blog_id,_title,_body) :- 'それ以外は友人と、自分の記事のみ表示'(_status,_id,_user_id,_blog_id,_title,_body). 'user.statusが管理者の時は無条件で記事を表示'(管理者,_id,_user_id,_blog_id,_title,_body) :- writef('%t %t %t\n',[_user_id,_blog_id,_title,_body]). 'それ以外は友人と、自分の記事のみ表示'(_status,_id,_user_id,_blog_id,_title,_body) :- \+(_status = 管理者), 友人か自分か(_id,_user_id), writef('%t %t %t\n',[_id,_blog_id,_title,_body]). 友人か自分か(_id,_user_id) :- friend(_id,_user_id). 友人か自分か(_id,_id) :- !. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/464 # # DBMSはMySQL 5.0です。 # # テーブル 合否 # 社員番号,結果,エラーコード # 1,合格,0 # 2,合格,0 # 1,合格,1 # 1,不合格,0 # 3,合格,0 # 2,合格,0 # 2,不合格,1 # # こういうテーブルがあります。 # 社員は一人で複数回受験できて、合格か不合格の結果を記録します。 # 但し、特定の条件だとエラーになって結果は出るけどエラーコードに1がつきます。 # # (1)エラーコードが0のものの、合格と不合格の件数が知りたいとき # SELECT 結果,COUNT(結果) FROM 合否 WHERE エラーコード=0 GROUP BY 結果 # # 結果 # 合格,4 # 不合格,1 # # (2)エラーコードにかかわらず、合格と不合格の件数が知りたいとき # SELECT 結果,COUNT(結果) FROM 合否 GROUP BY 結果 # # 結果 # 合格,5 # 不合格,2 # # そこで、 # (1)と(2)を同じ表に出力したいときはどう書けばいいでしょうか。 # このような表になればいいです。よろしくお願いします。 # 合格,4,5 # 不合格,1,2 # '(1) エラーコードが0のものの、合格と不合格の件数が知りたい'(_エラーコード0のものの合格の件数,_エラーコード0のものの不合格の件数) :- count(合否(_,合格,0),_エラーコード0のものの合格の件数), count(合否(_,不合格,0),_エラーコード0のものの不合格の件数). '(2) エラーコードにかかわらず、合格と不合格の件数が知りたい'(_エラーコードにかかわらない合格の件数,_エラーコードにかかわらない不合格の件数) :- count(合否(_,合格,_),_エラーコードにかかわらない合格の件数), count(合否(_,不合格,_),_エラーコードにかかわらない不合格の件数). '(1)と(2)を同じ表に出力する'(_結果,_エラーコード0の件数,_エラーコードにかかわらない件数) :- '(1) エラーコードが0のものの、合格と不合格の件数が知りたい'(_エラーコード0のものの合格の件数,_エラーコード0のものの不合格の件数), '(2) エラーコードにかかわらず、合格と不合格の件数が知りたい'(_エラーコードにかかわらない合格の件数,_エラーコードにかかわらない不合格の件数), member([_結果,_エラーコード0の件数,_エラーコードにかかわらない件数],[[合格,_エラーコード0のものの合格の件数,_エラーコードにかかわらない合格の件数],[不合格,_エラーコード0のものの不合格の件数,_エラーコードにかかわらない不合格の件数]]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/464 # # DBMSはMySQL 5.0です。 # # テーブル 合否 # 社員番号,結果,エラーコード # 1,合格,0 # 2,合格,0 # 1,合格,1 # 1,不合格,0 # 3,合格,0 # 2,合格,0 # 2,不合格,1 # # こういうテーブルがあります。 # 社員は一人で複数回受験できて、合格か不合格の結果を記録します。 # 但し、特定の条件だとエラーになって結果は出るけどエラーコードに1がつきます。 # # (1)エラーコードが0のものの、合格と不合格の件数が知りたいとき # SELECT 結果,COUNT(結果) FROM 合否 WHERE エラーコード=0 GROUP BY 結果 # # 結果 # 合格,4 # 不合格,1 # # (2)エラーコードにかかわらず、合格と不合格の件数が知りたいとき # SELECT 結果,COUNT(結果) FROM 合否 GROUP BY 結果 # # 結果 # 合格,5 # 不合格,2 # # そこで、 # (1)と(2)を同じ表に出力したいときはどう書けばいいでしょうか。 # このような表になればいいです。よろしくお願いします。 # 合格,4,5 # 不合格,1,2 # '(1) エラーコードが0のものの、合格と不合格の件数が知りたい'(_エラーコード0のものの合格の件数,_エラーコード0のものの不合格の件数) :- count(合否(_,合格,0),_エラーコード0のものの合格の件数), count(合否(_,不合格,0),_エラーコード0のものの不合格の件数). '(2) エラーコードにかかわらず、合格と不合格の件数が知りたい'(_エラーコードにかかわらない合格の件数,_エラーコードにかかわらない不合格の件数) :- count(合否(_,合格,_),_エラーコードにかかわらない合格の件数), count(合否(_,不合格,_),_エラーコードにかかわらない不合格の件数). '(1)と(2)を同じ表に出力する' :- '(1) エラーコードが0のものの、合格と不合格の件数が知りたい'(_エラーコード0のものの合格の件数,_エラーコード0のものの不合格の件数), '(2) エラーコードにかかわらず、合格と不合格の件数が知りたい'(_エラーコードにかかわらない合格の件数,_エラーコードにかかわらない不合格の件数), writef('合格,%t,%t\n不合格,%t,%t\n',[_エラーコード0のものの合格の件数,_エラーコード0のものの不合格の件数,_エラーコードにかかわらない合格の件数,_エラーコードにかかわらない不合格の件数]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/456 # # テーブル メニュー # メニュー番号, メニュー # 1 ステーキ # 2 ハンバーガー # 3 ビーフシチュー # # テーブル 注文 # 社員番号,名前,第1希望,第2希望,第3希望 # 1 鈴木 3 1 2 # 2 川本 1 2 3 # 3 山田 1 3 2 # # ここから # 1 鈴木 ビーフシチュー ステーキ ハンバーガー # と出力するにはどうすればいいでしょうか。 # # 第1希望だけなら where メニュー.メニュー番号=注文.第1希望 # で出るのですが。 # # '社員の第1希望、第2希望、第3希望のメニューを一行で表示する' :- '社員番号・名前・第1希望,第2希望,第3希望のメニュー'(_社員番号,_名前,_第1希望のメニュー,_第2希望のメニュー,_第3希望のメニュー), writef('%t %t %t %t %t\n',[_社員番号,_名前,_第1希望のメニュー,_第2希望のメニュー,_第3希望のメニュー]), fail. '社員の第1希望、第2希望、第3希望のメニューを一行で表示する'. '社員番号・名前・第1希望,第2希望,第3希望のメニュー'(_社員番号,_名前,_第1希望,_第2希望,_第3希望) :- 注文(_社員番号,_名前,_第1希望,_第2希望,_第3希望), メニュー(_第1希望,_第1希望のメニュー), メニュー(_第2希望,_第2希望のメニュー), メニュー(_第3希望,_第3希望のメニュー). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/456 # # テーブル メニュー # メニュー番号, メニュー # 1 ステーキ # 2 ハンバーガー # 3 ビーフシチュー # # テーブル 注文 # 社員番号,名前,第1希望,第2希望,第3希望 # 1 鈴木 3 1 2 # 2 川本 1 2 3 # 3 山田 1 3 2 # # ここから # 1 鈴木 ビーフシチュー ステーキ ハンバーガー # と出力するにはどうすればいいでしょうか。 # # 第1希望だけなら where メニュー.メニュー番号=注文.第1希望 # で出るのですが。 # # '社員の第1希望、第2希望、第3希望のメニューを一行で表示する' :- '社員の第1希望、第2希望、第3希望のメニューを一行で表示する'(_), fail. '社員の第1希望、第2希望、第3希望のメニューを一行で表示する'. '社員の第1希望、第2希望、第3希望のメニューを一行で表示する'(_社員番号) :- 注文(_社員番号,_名前,_第1希望,_第2希望,_第3希望), メニュー(_第1希望,_第1希望のメニュー), メニュー(_第2希望,_第2希望のメニュー), メニュー(_第3希望,_第3希望のメニュー), writef('%t %t %t %t %t\n',[_社員番号,_名前,_第1希望のメニュー,_第2希望のメニュー,_第3希望のメニュー]). % 以下のサイトは # # データセット # date # 2001-10-19 # 2001-10-19 # 2003-12-7 # 2004-9-7 # .... # # といったidと日付の集まりがあります。日付は重複しています。 # ここから,SELECT count(date) FROM table GROUP BY dateで日付ごとの集計が # とれたのですが、さらにmaxを使って集計が最大の日の日付とカウント数を # 出したいのですがうまくいきません。 # 上の例では、2001-10-19,2というのを取りたいのですが、どうやったらいいんでしょうか? '集計が最大の日の日付とカウント数'(_日付,_度数) :- findsetof(_日付,( データセット(_日付)), _日付ならび), member(_日付,_日付ならび), count(データセット(_日付),_度数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/411 # # 質問です。DBはSQLite3です。 # 構成が同じなので../test/read.cgi/db/1316769778/244のテーブルを説明に使わせてもらいます # # shop # id name # 1 Aカンパニー # 2 Bカンパニー # 3 Cカンパニー # # area # 1 北海道 # 2 青森 # 3 岩手 # 4 秋田 # # shop_area # shop_id area_id # 1 1 # 1 2 # 1 3 # 2 2 # 2 4 # 3 2 # 3 3 # # # 北海道なら、Bカンパニー・Cカンパニー # 青森なら、無し # 岩手なら、Bカンパニー # 秋田なら、Aカンパニー・Cカンパニー # 北海道・秋田なら、Cカンパニー # # 除外検索の要領で、対象の支社が無い会社を呼び出したい時はどうすればよいのでしょうか # '除外検索の要領で、対象の支社が無い会社を呼び出す' :- '除外検索の要領で、対象の支社が無い会社を呼び出す'(_地域ならび,_対象の支社が無い会社ならび), concat_atom(_地域ならび,'・',S1), concat_atom(_対象の支社が無い会社ならび,'・',S2), writef('%tなら、%t\n',[S1,S2]), fail. '除外検索の要領で、対象の支社が無い会社を呼び出す'. '除外検索の要領で、対象の支社が無い会社を呼び出す'(_地域ならび,_対象の支社が無い会社ならび) :- findall([_area_name,_対象の支社が無い会社ならび],( '対象の支社が無い会社を呼び出す'(_area_name,_対象の支社が無い会社ならび)), L1), findsetof(_対象の支社が無い会社ならび,( append(_,[[_,_対象の支社が無い会社ならび]|_],L1)), _対象の支社が無い会社ならびパターン), append(_,[_対象の支社が無い会社ならび|_],_対象の支社が無い会社ならびパターン), findall(_area_name,( append(_,[[_area_name,_対象の支社が無い会社ならび]|_],L1)), _地域ならび). '対象の支社が無い会社を呼び出す'(_area_name,_対象の支社が無い会社ならび) :- area(_area_id,_area_name), findsetof([_shop_id,_name],( shop_area(_shop_id,_area_id), shop(_shop_id,_name)), L1), findall(_name,( append(_,[[_shop_id,_name]|_],L1), \+(shop_area(_shop_id,_area_id))), _対象の支社が無い会社ならび). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/365 # # ・DB名:Firebird1.03 # ・テーブル #  ■メイン #   受注番号 受注日 注文社 #   11    2011/12/20 A社 #   12    2011/12/21 B社 #  ■サブ #   連番 受注番号 商品コード 数 #   50  11    A10    100 #   51  11    C30    20 #   52  12    A10    10 #  ■商品 #   商品コード 商品名 カテゴリ 納品番号(商品ごとで重複していません) #   A10     コート 洋服   100 #   C30     帯   和服   504 # # メインの受注番号とサブの受注番号、サブの商品コードと商品の商品コードで # リンクしています。 # # 欲しい結果 # 受注日の期間(いつからいつまで)と、商品のカテゴリと納品番号で、 # 受注の全内容(商品)が知りたいです。 # 受注日:2011/12/01から12/31まで # カテゴリ:洋服 納品番号:100で検索をして # # 受注番号 受注日 注文者 商品コード 商品名 数量 # 11    2011/12/20 A社 A10    コート 100 # 11    2011/12/20 A社 C30    帯   20----★ # 12    2011/12/21 B社 A10    コート 10 # ★受注の全内容が知りたいので、該当する受注番号のサブはすべて表示 # したい。メインの内容は重複表示となります。 # # 丸投げですみませんが、どなたかSQL文をお願いできませんでしょうか。 # テーブルが3つになるとどうしてよいものかわからないです。 # よろしくお願いします。 # # # '受注日の期間(いつからいつまで)と、商品のカテゴリと納品番号で、受注の全内容(商品)が知りたい'(_受注日下限,_受注日上限,_商品カテゴリ,_納品番号) :- 受注番号候補を得る(_受注日下限,_受注日上限,_カテゴリ,_納品番号,_受注番号ならび), findall([_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量],( append(_,[_受注番号|_],_受注番号ならび), 受注番号を鍵にデータベースからの選択(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量)), LL1), 整列(LL1,LL2), 表示する(LL2). 受注番号候補を得る(_受注日下限,_受注日上限,_カテゴリ,_納品番号,_受注番号ならび) :- findsetof(_受注番号,( メイン(_受注番号,_受注日,_注文社), _受注日 @>= _受注日下限, _受注日 @=< _受注日上限, サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_カテゴリ,_納品番号)), _受注番号ならび). 受注番号を鍵にデータベースを結合(_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量) :- メイン(_受注番号,_受注日,_注文社), サブ(_連番,_受注番号,_商品コード,_数量), 商品(_商品コード,_商品名,_カテゴリ,_納品番号). 表示する(LL) :- write('受注番号 受注日 注文者 商品コード 商品名 数量\n'), append(_,[[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量]|R],LL), writef('%10l %8l %8c %8c %8c %14l %8r\n',[_受注番号,_受注日,_注文者,_商品コード,_商品名,_数量]), R = []. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1322562648/792 # # [1] 授業単元:計算機アルゴリズム # [2] 問題文(含コード&リンク): # メンバとして映画のタイトル(文字列)と公開年(int # 型整数)をもつ構造体movie を宣言し,movie 型構造 # 体のメンバの値を設定してその構造体を返す関数struct movie set_movie(void)を作成しプログラムを完成させよ. # [実行例] # 映画のタイトルを入力してください:HAYABUSA # 公開年を入力してください:2011 # データを設定しました。 # タイトル:HAYABUSA 公開年:2011 # 'メンバとして映画のタイトル(文字列)と公開年(int型整数)をもつ構造体movie を宣言し,movie 型構造体のメンバの値を設定してその構造体を返す'(映画(_タイトル,_公開年)) :- 'メンバとして映画のタイトル(文字列)と公開年(int型整数)をもつ構造体movie を宣言し', 映画に値を設定する(_映画のタイトル,_公開年), assertz(映画(_映画のタイトル,_公開年)), write('データを設定しました。\n'), writef('タイトル:%t 公開年:%t\n',[_タイトル,_公開年]). 'メンバとして映画のタイトル(文字列)と公開年(int型整数)をもつ構造体movie を宣言し' :- assertz(データベース定義(映画,1,タイトル)), assertz(データベース定義(映画,2,公開年)). 値を設定する(_映画のタイトル,_公開年) :- 映画のタイトルの入力(_映画のタイトル), 公開年の入力(_公開年). 映画のタイトルの入力(_映画のタイトル) :- write('映画のタイトルを入力してください:'), get_line(_映画のタイトル). 公開年の入力(_公開年) :- write('公開年を入力してください:'), get_line(_公開年). % 以下のサイトは # 出典::SQL質疑応答スレ 12問目 #353 # MySQL 5.1 # 株価テーブル kabuka # stock_code ←銘柄コード # vol_date ←出来高年月日 # sp # hp # lp # cp # vol # # 銘柄マスタ stock_info # stoc_code ←銘柄コード # shkbn ←商品区分(0,1,2,3,4) # stk_name ← 銘柄名 # delete_flg 削除区分 # 〜その他いろいろな項目 # # 銘柄マスタの商品区分0及び1は除外して銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日の一覧を出したい # # select a.stock_code,stk_name,shkbn,min(vol_date),max(vol_date) # from kabuka a # inner join stock_info b # on a.stock_code = b.stock_code # where # a.stock_code in # (select b.stock_code from stock_info # where delete_flg=0 and shkbn not in(0,4)) # group by a.stock_code # order by shkbn,a.stock_code; # # で、上記のSQLを書いてみたんですが、shkbnが0及び4のもでてしまいます # 出さないようにするにはどうすればいいのでしょうか? # # 銘柄マスタの商品区分0及び1は除外して銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日の一覧を出したい :- 一覧を出したい(銘柄マスタの商品区分0及び1は除外して(_銘柄,_銘柄名), 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を表示する(_銘柄,_銘柄名)). 一覧を出したい(_表示対象,_表示する) :- forall(_表示対象,_表示する). 銘柄マスタの商品区分0及び1は除外して(_銘柄,_銘柄名) :- setof([_stoc_code,_stk_name],( [_stoc_code,_shkbn,_stk_name,_delete_flg] ^ stock_info(_stoc_code,_shkbn,_stk_name,_delete_flg), 商品区分0及び1は除外して(_shkbn)),LL), member([_銘柄,_銘柄名],LL). 商品区分0及び1は除外して(_shkbn) :- _shkbn=\=0, _shkbn=\=1. 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を表示する(_stock_code,_銘柄名) :- 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を(_stock_code,_最古登録日,_最新登録日), writef('%t,%t,最古登録日=%t,最新登録日=%t\n',[_stoc_code,_銘柄名,_最古登録日,_最新登録日]). 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と最新登録日を(_stock_code,_最古登録日,_最新登録日) :- '銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と'(_stock_code,_最古登録日), 最新登録日を(_stock_code,_最新登録日). 銘柄名を付けて株価テーブルから銘柄ごとの最古登録日と(_stock_code,_最古登録日) :- findmin(_vol_date,kabuka(_stock_code,_vol_date,_sp,_hp,_lp,_cp,_vol),_最古登録日). 最新登録日を(_stock_code,_最新登録日) :- findmax(_vol_date,kabuka(_stock_code,_vol_date,_sp,_hp,_lp,_cp,_vol),_最新登録日). findmin(A,B,C) :- findall(A,B,L), 昇順整列した最初の要素(L1,C). 昇順整列した最初の要素(L1,C) :- sort(L,[C|_]). findmax(A,B,C) :- findall(A,B,L1), 昇順整列した最終要素(L1,C). 昇順整列した最終要素(L1,C) :- sort(L1,L2), last(L2,C). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/351 # # 解決気味です。 # # 上記を諦め、 # # T1 マスタテーブル # ID | DATE    | DATA |ckbox # --+----------+----- |------ # 1 | 2007-11-11 | aaa | 201,202,205,401,403,404 # 2 | 2007-11-11 | bbb | 202,203 # 3 | 2007-11-10 | ccc | 203,204,403,404,405 # # 上記の形式にして # select ID,DATE,DATA from `T1` # where # CONCAT(',',chkbox,',') like '%,201,%' # and # CONCAT(',',chkbox,',') like '%,202,%' # and # CONCAT(',',chkbox,',') like '%,403,%' # # こういった形で取得。 # # チェックボックスは計300個程ありそれぞれユニークを振っています。 # チェックされている数は平均50個程。 # レコード数は約1万程なのですがこの方法で大丈夫かどうか心配です。 # 'チェックボックスならびを指定してT1の組を検索'(_チェックボックスならび,_ID,_DATE,_DATA,_ckbox) :- 'T1'(_ID,_DATE,_DATA,_ckbox), split(_ckbox,[','],L), 'チェックボックスならびの要素はすべてLの中にある'(_チェックボックスならび,L). 'チェックボックスならびの要素はすべてLの中にある'([],_). 'チェックボックスならびの要素はすべてLの中にある'([_要素|R],L) :- member(_要素,L), 'チェックボックスならびの要素はすべてLの中にある'(R,L). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/348 # # (質問) #  チェックボックス値による検索を行いたいと思っています。 # # MYSQL5.1 # # T1 マスタテーブル # ID | DATE     | DATA # --+----------+----- # 1 | 2007-11-11 | aaa # 2 | 2007-11-11 | bbb # 3 | 2007-11-10 | ccc # # T2 チェックボックステーブル1 # ID | cate1     | # --+--------- | # 1 | 201      | # 1 | 202      | # 1 | 205      | # 2 | 202      | # 2 | 203      | # 3 | 203      | # 3 | 204      | # # T3チェックボックステーブル2 # ID | cate2     | # --+--------- | # 1 | 401      | # 1 | 403      | # 1 | 404      | # 3 | 403      | # 3 | 404      | # 3 | 405      | # # このような3つのテーブルから、下記のように出したいがどうすれば # # T2で 201、202、を含み # 且つ # T3で 403 を含む  # # 結果 T1のIDレコード # 1 | 2007-11-11 | aaa # # 試した事 # select * from `T1` # join `T2` using(ID) # join `T3` using(ID) # where # cate1 in(201,202) # and cate2 in(403) # group by ID # having count(*)=?? # # 絞るのにカウント数がT1、T2のチェックレコード数で # 可変するので詰まっています。 # そもそも、考え方がおかしいのかもしれません。 # 良い方法をご教示ください。 # 'T2で 201、202、を含み 且つ T3で 403 を含む T1のIDレコード' :- 'T1'(_ID,_DATE,_DATA), 'T2'(_ID,_cate1), '201、202、を含み'(_cate1), 'T3'(_ID,403), writef('%t | %t | %t\n',[_ID,_DATE,_DATA]), fail. 'T2で 201、202、を含み 且つ T3で 403 を含む T1のIDレコード'. '201、202、を含み'(201). '201、202、を含み'(202). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/344 # # MySQL 5.1 使用しています。 # # 出勤カレンダーを作って、工程表を作りたいのですが、出勤日テーブルに # 出勤日テーブルは以下のようにして # # T_出勤日 # # 日にち, 出勤 # ---------------- # 1月5日  ○ # 1月6日  ○ # 1月7日  × # 1月8日  × # 1月9日  ○ # # 「今日」が出勤日(○)として、「今日の前の出勤日からはじめて、 # 今後の出勤日」を抜き出すSQL文はどう書いたらよいのでしょう? # つまり、「今日」が2番目に来るような抜き出し方です。 # 一応、考えたのは # # (SELECT 日にち FROM T_出勤日 WHERE 出勤='○' AND 日にち<DATE() LIMIT 1) # UNION # (SELECT 日にち FROM T_出勤日 WHERE 出勤='○' AND 日にち>=DATE() # ORDER BY 日にち ASC); # # これより簡潔に書けるでしょうか? # '出勤カレンダーを作って、工程表を作りたい。「今日」が出勤日(○)として、「今日の前の出勤日からはじめて、今後の出勤日」を抜き出す'(_今日,[_前回の出勤日,_今日|_今後の出勤日ならび]) :- findall(_日にち,( 'T_出勤'(_日にち,○)), L1), sort(L1,L2), append(_,[_前回の出勤日,_今日|_今後の出勤日ならび],L2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/334 # # mysqlで質問です。 # # | col1 | col2 | col3 | col4 | col5 | col6 | # # | 3 | 1 | 0 | 5 | 4 | 12 | # # | 2 | 5 | 6 | 0 | 1 | 8 | # # のようなテーブルで # 複数の条件、例えばA,B,C,D,E,Fで # このうちの3つの条件がいずれかでもあえば # そのレコードを取得するというような # クエリは可能でしょうか。 # # イメージ的にはLOTO6で5等に該当するレコードは全て取得するといった # 感じなのですが。 # # # '複数の条件、例えばA,B,C,D,E,Fでこのうちの3つの条件がいずれかでもあえばそのレコードを取得する'([[_colA,A],[_colB,B],[_colC,C],[_colD,D],[_colE,E],[_colF,F]],_col1,_col2,_col3,_col4,_col5,_col6) :- テーブル(_col1,_col2,_col3,_col4,_col5,_col6), '3つの条件がいずれかでもあえば'([[_colA,A],[_colB,B],[_colC,C],[_colD,D],[_colE,E],[_colF,F]],[_col1,_col2,_col3,_col4,_col5,_col6]). '3つの条件がいずれかでもあえば'(_条件ならび,_列ならび) :- 条件の組合せ(_条件ならび,_3つの条件), 条件判定(_3つの条件,_列ならび),!. 条件の組合せ(_条件ならび,_3つの条件) :- 組合せ(_条件ならび,3,_3つの条件). 条件判定([],_) :- !. 条件判定([[_col,_条件]|R],_列ならび) :- member(_col,_列ならび), call(_条件), 条件判定(R,_列ならび). % % 条件ならびの書き方は % A,B,C,D,E,Fの中にそれぞれ_colA,_colB,_colC,_colD,_colE,_colFを含ませる。 % % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/332 # # oracleです。 # # ・テーブルデータ # テーブルA #  ID |日付 #  100|10/1 #  100|10/2 # 100|10/5 #  101|11/1 #  102|11/1 #  102|11/2 #  103|12/1 # # # テーブルB #  ID |期間(自)|期間(至) #  100|10/1  |10/4 #  101|10/1  |10/30 #  102|11/1  |11/5 #  103|12/1  |12/1 #   # # ・欲しい結果 # #  ID |期間内のカウント #  100|2 #  101|0 #  102|2 #  103|1 #   # # ・説明: # IDをキーに、期間内のIDごとのカウントをとりたいです。 # SQL1本で取得する方法はありますでしょうか? # 列は増やしたくないです。 # テーブルA(100,10/1). テーブルA(100,10/2). テーブルA(100,10/5). テーブルA(101,11/1). テーブルA(102,11/1). テーブルA(102,11/2). テーブルA(103,12/1). テーブルB(100,10/1,10/4). テーブルB(101,10/1,10/30). テーブルB(102,11/1,11/5). テーブルB(103,12/1,12/1). 'IDをキーに、期間内のIDごとのカウントをとりたい'(_ID,_期間_自,_期間_至,_度数) :- findsetof([_ID,_期間_自,_期間_至],( テーブルB(_ID,_期間_自,_期間_至)), LL1), append(_,[[_ID,_期間_自,_期間_至]|_],LL1), count(( テーブルA(_ID,_日付), _日付 @>= _期間_自, _日付 @=< _期間_至), _度数). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/323 # # 【質問テンプレ】 # ・DBMS名とバージョン MySQL 5.1 # ・テーブルデータ # ・欲しい結果 # ・説明 # # テーブル「カート」 # カラム 「セッションID」「商品種別」「カートに入れた時刻」 # # テーブル「カート詳細」 # カラム 「セッションID」「商品コード」 # # テーブル「商品リスト」 # カラム「商品コード」「商品種別」 # # というテーブルがあります。 # # 最後にカートに入れた時刻から12時間以上経過したセッションIDを検索して、 # そのセッションIDを持つレコードを「カート」「カート詳細」の両方から # 全て削除したいのです。 # # 同じセッションIDを持つレコードは、両方のテーブルに複数あります。 # 「注文」テーブルで「セッションID」「商品種別」の組合せはユニークで、 # 「注文詳細」テーブルでは「セッションID」「商品コード」の組合せにユニークです。 # # 結合や副問い合わせを試してみましたが、うまいこと抽出できません。 # SQLで書くやり方があれば教えてください。よろしくお願いします。 # # '最後にカートに入れた時刻から12時間以上経過したセッションIDを検索して、そのセッションIDを持つレコードを「カート」「カート詳細」の両方から全て削除する' :- '最後にカートに入れた時刻から12時間以上経過したセッションIDを検索して'(_セッションID,R), 'そのセッションIDを持つレコードを「カート」「カート詳細」の両方から全て削除する'(_セッションID), R = []. '最後にカートに入れた時刻から12時間以上経過したセッションIDを検索して'(_セッションID,R) :- '最後にカートに入れた時刻から'(_セッションID,R), '12時間以上経過している(_セッションID,_最後にカートに入れた時刻). '最後にカートに入れた時刻から'(_セッションID,R) :- setof(_セッションID,([_セッションID,_商品種別,_カートに入れた時刻] ^ カート(_セッションID,_商品種別,_カートに入れた時刻)),_セッションIDならび), append(_,[_セッションID|R],_セッションIDならび), findmax(_カートに入れた時刻,( カート(_セッションID,_商品種別,_カートに入れた時刻)),_最後にカートに入れた時刻). 'そのセッションIDを持つレコードを「カート」「カート詳細」の両方から全て削除する'(_セッションID) :- retractall(カート(_セッションID,_,_)), retractall(カート詳細(_セッションID,_)). '12時間以上経過している(_セッションID,_最後にカートに入れた時刻) :- split(_最後に入れた時刻,['/',' ',':'],[_年,_月,_日,_時,_分]), 現在の時刻(_年_1,_月_1,_日_1,_時_1,_分_1), '12時間後の日時'(_年,_月,_日,_時,_分,_年_2,_月_2,_日_2,_時_2,_分_2), [_年_1,_月_1,_日_1,_時_1,_分_1] @>= [_年_2,_月_2,_日_2,_時_2,_分_2],!. '12時間後の日時'(_年,_月,_日,_時,_分,_年,_月,_日,_時_2,_分) :- _時_2 is _時 + 12, _時_2 < 24,!. '12時間後の日時'(_年,_月,_日,_時,_分,_年,_月,_日_2,_時_2,_分) :- _時_1 is _時 + 12, _時_2 is _時_1 - 24, _日_2 is _日 + 1,!. retractall(P) :- retract(P), fail. retractall(_). split(_文字列,_区切り記号ならび,[_文字列]) :- 文字列は区切り記号ではない(_文字列,_区切り記号,_区切り記号ならび),!. split(_文字列,_区切り記号ならび,L) :- 区切り記号で区切って行く(_文字列,_区切り記号ならび,L). 文字列は区切り記号ではない(_文字列,_区切り記号,_区切り記号ならび) :- forall(副文字列(_文字列,_前文字列,_区切り記号,_後文字列), \+(member(_区切り記号,_区切り記号ならび))). 区切り記号で区切って行く(_文字列,_区切り記号ならび,[_前文字列|R]) :- 副文字列(_文字列,_前文字列,_区切り記号,_後文字列), member(_区切り記号,_区切り記号ならび), split(_後文字列,_区切り記号ならび,R),!. 副文字列(_文字列,_前文字列,_副文字列,_後文字列) :- sub_atom(_文字列,S,_,R,_副文字列), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/db/1316769778/319 # # tbl_rosen (駅名と備考は1:1) # 路線名  駅名  備考 # ---------------------- # A線   i駅   備考1 # A線   j駅   備考2 # A線   k駅   備考3 # B線   k駅   備考3 # B線   l駅   備考4 # B線   m駅   備考5 # C線   n駅   備考6 # D線   k駅   備考3 # D線   o駅   備考7 # # tbl_shop # 店名  最寄駅 # --------------- # X店   j駅 # X店   m駅 # X店   o駅 # Y店   l駅 # Z店   k駅 # # tbl_rosenは鉄道路線とその駅名のテーブル(1路線に対して1〜n駅ある)、 # tbl_shopは、スーパーの名前と最寄駅(1店に対して0〜nの最寄駅がある) # # <やりたいこと> # ・その店に鉄道で行くことが出来る駅のリストを作成したい # ・ある特定の路線は除外(上の例だと、D線は対象外) # ・乗り換えは考慮しない。 # # →例えば、Z店はk駅が最寄りで、k駅はA線、B線、D線の乗り入れ。D線を除外すると、 # i、j、k、l、m駅から電車(±徒歩)でZ店に行ける # # <最終的に出力したいテーブル) # tbl_output # 店名  最寄駅  備考 # ---------------------- # X店   i駅   備考1 # X店   j駅   備考2 # X店   k駅   備考3 # X店   l駅   備考4 # X店   m駅   備考5 # Y店   k駅   備考3 # Y店   l駅   備考4 # Y店   m駅   備考5 # Z店   i駅   備考1 # Z店   j駅   備考2 # Z店   k駅   備考3 # Z店   l駅   備考4 # Z店   m駅   備考5 # # # 2段階に分ければ(駅で結合して店名、路線名でグループ化(D線除外)した # テンポラリテーブルをつくって、さらにtbl_rosenと結合する)普通にできるのですが、 # 出来れば一発のSQLで出力したいのですが、SQL自体にまだ馴染みが薄く、 # どのように書いて良いのかわかりません # # よろしくお願いします(PostgreSQL8.4です) # # 'その店に鉄道で行くことが出来る駅のリストを作成したい ・ある特定の路線は除外(上の例だと、D線は対象外)・乗り換えは考慮しない。 '(_店名,_除外する路線名ならび,L) :- 店候補(_店名,R), その店に鉄道で行くことができる駅候補(_店名,_路線名ならび), その店に鉄道で行くことが出来る駅のリストを作成する(_店名,_除外する路線名ならび,_路線名ならび), R = []. 店候補(_店名,R) :- findsetof(_店名,( tbl_shop(_店名,_,_)), _店名ならび), append(_,[_店名|R],_店名ならび). その店に鉄道で行くことができる駅候補(_店名,_路線名ならび) :- findsetof(_路線名,( tbl_shop(_店名,_最寄駅,_備考1), tbl_rosen(_路線名,_最寄駅,_備考2)), _路線名ならび). その店に鉄道で行くことが出来る駅のリストを作成する(_店名,_除外する路線名ならび,_路線名ならび) :- append(_,[_路線名|R],_路線名ならび), tbl_rosen(_路線名,_駅名,_備考), \+((member(_路線名,_除外する路線名ならび)), assertz(tbl_output(_店名,_駅名,_備考)), R = []. findsetof(A,B,L) :- findall(A,B,C), setof(A,member(A,C),L). findsetof(A,B) :- findall(A,B,C), setof(A,member(A,C),D), member(A,D). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/317 # # 検索結果の集合の共通部分は求められますか。 # たとえばid=1の結果が{a, b, c, d}でid=2の結果が{b, c, e}なら{b, c}を求めたいです。 # '検索結果の集合の共通部分は求める'(_id1,_id2,_共通する値) :- setof(_値,(テーブル(_id1,_値),テーブル(_id2,_値)),L), member(_共通する値,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/312 # # access2000で # # NEN | TUKI # 23 | 11 # ってデータがあったら # # 平成23年12月31日のように常に次月末日を返したいのですが # どのようなクエリになりますか? # '平成23年12月31日のように常に次月末日を返す'(_次月末日) :- 年月(_NEN,_TUKI), '平成23年12月31日のように常に次月末日を返す'(_NEN,_TUKI,_次月末日). '平成23年12月31日のように常に次月末日を返す'(_NEN,12,_次月末日) :- _NEN_2 is _NEN + 1, concat_atom([平成,_NEN_2,年,1,月,31,日],_次月末日),!. '平成23年12月31日のように常に次月末日を返す'(_NEN,_TUKI,_次月末日) :- member(_TUKI,[2,4,6,7,9,11]), _TUKI_2 is _TUKI + 1, concat_atom([平成,_NEN,年,_TUKI_2,月,31,日],_次月末日),!. '平成23年12月31日のように常に次月末日を返す'(_NEN,_TUKI,_次月末日) :- member(_TUKI,[3,5,8,10]), _TUKI_2 is _TUKI + 1, concat_atom([平成,_NEN,年,_TUKI_2,月,30,日],_次月末日),!. '平成23年12月31日のように常に次月末日を返す'(_NEN,1,_次月末日) :- _西暦年 is _NEN + 1988, うるう年(_西暦年), concat_atom([平成,_NEN,年,2,月,29,日],_次月末日),!. '平成23年12月31日のように常に次月末日を返す'(_NEN,1,_次月末日) :- _西暦年 is _NEN + 1988, \+(うるう年(_西暦年)), concat_atom([平成,_NEN,年,2,月,28,日],_次月末日),!. うるう年(_年文字列) :- atom(_年文字列), atom_to_term(_年文字列,_年整数,_),!, うるう年(_年整数). うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/293 # # oracleです。 # # ・テーブルデータ # テーブルA #  ID |状態 #  100|○ #  100|○ #  101|○ #  102|○ #  104|○ #  105|× # テーブルB #  ID |状態 #  100|○ #  100|○ #  100|○ #  103|○ #  105|○ #  106|× # # ・欲しい結果 # #  ID |AのCOUNT(ID)|BのCOUNT(ID) #  100|2 |3 #  101|1 |null #  102|1 |null #  104|1 |null #  105|null |1 # # ・説明: # A,B各テーブルの状態が○であるものをID単位でカウントし、 #  AとBのテーブルを結合したいのですが、SQL1本で可能でしょうか? #  結合する際、どちらかのテーブルのカウントが1以上であれば出力したいです。 # # 'A,B各テーブルの状態が○であるものをID単位でカウントし、AとBのテーブルを結合したいのですが、SQL1本で可能でしょうか? 結合する際、どちらかのテーブルのカウントが1以上であれば出力したいです。'(_ID,CountA,CountB) :- findsetof(_ID,( テーブルA(_ID,○ ); テーブルB(_ID,○ )), L), append(_,[_ID|_],L), count(テーブルA(_ID,○ ),CountA), count(テーブルB(_ID,○ ),CountB). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/305 # # MySQL5です。 # # programテーブル # `program_id`,`program_name` # # titleテーブル # `program_id`,`title_id`,`title` # # dataテーブル # `program_id`,`title_id`,`data_id`,`open_flag` # # という感じで3つのテーブルがあります。 # ここから、data.`open_flag`が'1'の物を含む、 # title.`title`を、program単位でランダムに5件抽出したいと思っていますが、 # # SELECT # ttl.`title` # ,prg.`program_id` # ,ttl.`title_id` # FROM `title` AS ttl # LEFT JOIN `program` AS prg ON prg.`program_id`=ttl.`program_id` # LEFT JOIN `data` AS dat ON dat.`program_id`=ttl.`program_id` AND dat.`title_id`=ttl.`title_id` # WHERE dat.`open_flag` = 1 # ORDER BY RAND() # LIMIT 0,5 # # とやった場合、同じprogram_idが重複して抽出される場合が出てきてしまいます。。 # この場合、重複せず必ずことなる`program_id`から抽出するにはどうしたら良いでしょうか? # # 'data.`open_flag`が 1 の物を含む、title.`title`を、program単位でランダムに5件抽出したい'(_title) :- program(_program_id,_program_name), writef('program_name = %t\n',[_program_name]), 'titleの蒐集'(_program_id,L), ランダムに5件抽出したい(L,_title). 'titleの蒐集'(_program_id,L) :- findall(_title_id,( data(_program_id,_title_id,_data_id,_open_flag), _open_flag = '1', title(_program_id,_title_id,_title)), L). ランダムに5件抽出したい(L,_title) :- length(L,Len), ランダムに5件抽出したい(Len,[_,_,_,_,_],L,[],_5件抽出したtitle), member(_title,_5件抽出したtitle). ランダムに5件抽出したい(_,[],L,_,[]). ランダムに5件抽出したい(Len,[_|Ln],L,L1,[_title|R2]) :- まだ抽出していないtitleを得る(Len,L,L1,_title), ランダムに5件抽出したい(Len,Ln,L,[_title|L1],R2). まだ抽出していないtitleを得る(Len,L,L1,_title) :- Nth is random(Len) + 1, nth1(Nth,L,_title), \+(member(_title,L1)),!. まだ抽出していないtitleを得る(Len,L,L1,_title) :- まだ抽出していないtitleを得る(Len,L,L1,_title). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/301 # # MySQLで質問させてください。 # ある条件で絞ったレコードを日付でソートして # 最新のn件以降を削除したい場合はどのようなSQLを書くのが良いでしょうか? # 'ある条件で絞ったレコードを日付でソートして最新のn件以降を削除する'(_テーブル,_条件,_n件) :- ある条件で絞ったレコードを(_テーブル,_条件,LL1), 日付でソートして(LL1,LL), 最新のn件以降を(LL,_n件,LL2), 削除する(_テーブル,LL2). ある条件で絞ったレコードを(_テーブル,_条件,_削除する件数,_ある条件で絞ったレコード) :- 属性ならびの取得(_テーブル,_属性名ならび,_属性ならび), P =.. [_テーブル|_属性ならび], findall(_属性ならび,( P, _条件), _ある条件で絞ったレコード). 属性ならびの取得(_テーブル,_属性名ならび,_属性ならび) :- setof([_属性順序,_属性名],( テーブル定義(_テーブル,_属性順序,_属性名)), L1), findall(_属性名,( member([_,_属性名],L2)), _属性名ならび), length(_属性名ならび,Len), length(_属性ならび,Len),!. 日付でソートして(_組ならび,_整列した組ならび) :- テーブル定義(_テーブル,_nth,日付), findall([_日付|_属性ならび],( member(_属性ならび,_組ならび)), LL2), sort(LL2,LL3), 鍵の日付を取り除く(LL3,_整列した組ならび). 最新のn件以降を(LL,_n件,LL2) :- length(LL2,_n件), append(LL1,LL2,LL),!. 削除する(_テーブル,LL) :- append(_,[L|R],LL). P =.. [_テーブル|L], retract(P), R = []. 鍵の日付を取り除く([],[]). 鍵の日付を取り除く([[_|L]|R1],[L|R2]) :- 鍵の日付を取り除く(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/718 # # 最後から任意の件数を問い合わせたいのですが # select time from test order by time desc offset 0 limit 3;で # 呼び出すと下記のようになりますが # # time         # ------------------ # 2011-11-28 08:20:16 # 2010-10-26 06:20:16 # 2009-09-24 04:20:16 # # # ↓のように更にソートして呼び出すにはどう書けばよいのでしょうか? # time           # ------------------ # 2009-09-24 04:20:16 # 2010-10-26 06:20:16 # 2011-11-28 08:20:16 # # '最後から任意の件数を問い合わせる'(_任意の件数,L) :- テーブル構造の取得(test,time,P,_time), 全テーブルの取得(P,_time,LL1), 最後から任意の件数を取り出す(_任意の件数,LL1,L). テーブル構造の取得(_テーブル名,_鍵名,P,_項) :- findall(_,( テーブル定義(_テーブル名,_,_)), L), テーブル定義(_テーブル名,_項番号,_鍵名), nth1(_項番号,L,_項), P =.. [_テーブル名|L]. 全テーブルの取得(P,_time,LL1) :- findall([_time],( P), LL1). 逆順に整列(LL1,LL2) :- sort(LL1,LL3), reverse(LL3,LL2). 最後から任意の件数を取り出す(_任意の件数,LL,L) :- length(LL3,_任意の件数), append(LL3,_,LL2), 逆順に整列(LL1,LL2), member(L,LL3). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/703 # # 年代別集計をしたく以下のようにしていますが # 結果が0でもその年代も表示したいのですができませんでしょうか? # # SELECT CASE # when r.age between 0 and 9 then '0 - 9' # when r.age between 10 and 19 then '10 - 19' # when r.age between 20 and 29 then '20 - 29' # when r.age between 30 and 39 then '30 - 39' # when r.age between 40 and 49 then '40 - 49' # when r.age between 50 and 59 then '50 - 59' # when r.age between 60 and 69 then '60 - 69' # when r.age between 70 and 79 then '70 - 79' # when r.age between 80 and 89 then '80 - 89' # when r.age between 90 and 99 then '90 - 99' # when r.age >=100 then '100' # end AS "age_group" # ,COUNT(CASE # when r.age between 0 and 9 then '0 - 9' # when r.age between 10 and 19 then '10 - 19' # when r.age between 20 and 29 then '20 - 29' # when r.age between 30 and 39 then '30 - 39' # when r.age between 40 and 49 then '40 - 49' # when r.age between 50 and 59 then '50 - 59' # when r.age between 60 and 69 then '60 - 69' # when r.age between 70 and 79 then '70 - 79' # when r.age between 80 and 89 then '80 - 89' # when r.age between 90 and 99 then '90 - 99' # when r.age >=100 then '100' # end) AS "age_count" # FROM rank as r # GROUP BY age_group # ORDER BY age_group; # # '年代別集計を結果が0でも表示する' :- findall([_年代別表示,_度数],( for(0,N,10), 年代別に集計する(N,_年代別表示,_度数)), LL), 表示する(LL). 年代別に集計する(10,'100才以上',_度数) :- '100才以上を集計する'(_度数),!. 年代別に集計する(N,_年代別表示,_度数) :- _年齢下限 is N * 10, _年齢上限 is _年齢下限 + 9, 年齢範囲の集計(_年齢下限,_年齢上限,_度数), concat_atom([_年齢下限,才,'-',_年齢上限,才],_年代別表示). '100才以上を集計する'(_度数) :- count(( rank(_age), _age >= 100), _度数). 年齢範囲の集計(_年齢下限,_年齢上限,_度数) :- count(( rank(_age), _age >= _年齢下限, _age =< _年齢上限), _度数). 表示する(LL) :- append(_,[[_年代別表示,_度数]|R],LL), writef('%t,%t\n',[_年代別表示,_度数]), R = []. % 以下のサイトは # # 犬の誕生日が記録してあるデータが入ったテーブルがあります。 # 兄弟犬を抽出したいという要望です。 # # 兄弟の定義は「母が同一かつ同時に出産した個体(同胎)」だとします。 # 母親は各データが持っていますが、同時出産でも誕生日が日付をまたぐことがあります。 # 2日にまたがる難産の場合もあると思われます。 # ただし、出産は数ヶ月に一度です。 # 母犬(ピノ,リリー). 母犬(キオ,リリー). 母犬(グリ,リリー). 誕生日(ピノ,2003/7/31). 誕生日(キオ,2003/8/1). 誕生日(グリ,2007/4/15). 兄弟犬を抽出したい(_犬,_兄弟犬) :- 母犬が共通(_犬,_兄弟犬), 誕生日が2日以内(_犬,_兄弟犬), 自分自身は除く(_犬,_兄弟犬). 自分自身は除く(_犬_1,_犬_2) :- \+(_犬_1 == _犬_2). 母犬が共通(_犬,_兄弟犬) :- 母犬(_犬,_母犬), 母犬(_兄弟犬,_母犬). 誕生日が2日以内(_犬,_兄弟犬) :- 誕生日が(_犬,_兄弟犬,_犬の誕生日,_兄弟犬の誕生日), '2日以内'(_犬の誕生日,_兄弟犬の誕生日). 誕生日が(_犬,_兄弟犬,_犬の誕生日,_兄弟犬の誕生日) :- 誕生日(_犬,_犬の誕生日), 誕生日(_兄弟犬,_兄弟犬の誕生日). '2日以内'(_犬の誕生日,_兄弟犬の誕生日) :- 連続日(_犬の誕生日の前日,_犬の誕生日), 連続日(_犬の誕生日,_犬の誕生日の翌日), member(_兄弟犬の誕生日,[_犬の誕生日,_犬の誕生日の前日,_犬の誕生日の翌日]). 連続日(_前の日の年/_前の日の月/_前の日の日,_後の日の年/_後の日の月/_後の日の日) :- 翌日(_前の日の年,_前の日の月,_前の日の日,_後の日の年,_後の日の月,_後の日の日). 翌日(_年,12,31,_翌日の年,1,1) :- succ(_年,_翌日の年),!. 翌日(_年,2,29,_年,3,1) :- うるう年(_年),!. 翌日(_年,2,28,_年,3,1) :- \+(うるう年(_年)),!. 翌日(_年,_月,_日,_年,_翌日の月,1) :- succ(_月,_翌日の月), '十二月・二月を除く月末日'(_月,_日),!. 翌日(_年,_月,_日,_年,_月,_翌日の日) :- succ(_日,_翌日の日). '十二月・二月を除く月末日'(_月,30) :- 小の月(_月). '十二月・二月を除く月末日'(_月,31) :- 大の月(_月). 小の月(_月) :- member(_月,[2,4,6,9,11]). 大の月(_月) :- member(_月,[1,3,5,7,8,10,12]). うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100,!,fail. うるう年(_年) :- 0 is _年 mod 4. % 以下のサイトは # 出典 :: SQL質疑応答スレ 12問目 #244 # MySQL5です。 # # shop # id name # 1 Aカンパニー # 2 Bカンパニー # 3 Cカンパニー # # area # 1 北海道 # 2 青森 # 3 岩手 # 4 秋田 # # shop_area # shop_id area_id # 1 1 # 1 2 # 1 3 # 2 2 # 2 4 # 3 2 # 3 3 # # 青森と岩手、両方に支店のある会社を抽出したいです。 # shop_id name # 1 Aカンパニー # 3 Cカンパニー # # 「青森、岩手のどちらかに店舗のある」という条件でしたら # SELECT shop.id AS shop_id, shop.name FROM shop_area INNER JOIN shop ON shop_area.shop_id = shop.id WHERE shop_area.area_id IN (2, 3) ORDER BY shop.id # というので出来たのですが、「両方にある」という条件になったら書き方がわかりません。 # # よろしくお願いします。 # shop(1,'Aカンパニー'). shop(2,'Bカンパニー'). shop(3,'Cカンパニー'). area(1,北海道). area(2,青森). area(3,岩手). area(4,秋田). shop_area(1,1). shop_area(1,2). shop_area(1,3). shop_area(2,2). shop_area(2,4). shop_area(3,2). shop_area(3,3). '青森、岩手の両方に店舗のあるカンパニー'(_id,_name) :- カンパニーの候補を得る(_id,_name), 店舗を二つ取り出す(_id,_area_id_1,_area_id_2), 青森と岩手の両方に店舗がある(_area_id_1,_area_id_2). カンパニーの候補を得る(_id,_name) :- shop(_id,_name). 店舗を二つ取り出す(_id,_area_id_1,_area_id_2) :- shop_area(_id,_area_id_1), shop_area(_id,_area_id_2), \+(_area_id_1 = _area_id_2). 青森と岩手の両方に店舗がある(_area_id_1,_area_id_2) :- 青森に(_area_id_1), 岩手に(_area_id_2),!. 青森に(_area_id) :- area(_area_id,青森). 岩手に(_area_id) :- area(_area_id,岩手). % % 問題文の中に支店と店舗という二つの語が同じ意味で使われている。 % ここでは店舗の方を採用した。 % % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/249 # # ・MySQL5です # ・テーブルデータ #  ID|名前|データ #  01|鈴木|0001 #  02|佐藤|0002 #  01|鈴木|0003 # ・欲しい結果 #  ID|名前|*|DATA1|DATA2 #  01|鈴木|2|0001 |0003 #  02|佐藤|1|0002 | # # ・説明:group by と count(*) を使うと↓のように、グループ化され消えてしまう列の値を(この場合`0003`の部分)、↑みたく、行に書出す方法はありますか? #  ID|名前|*|データ #  01|鈴木|2|0001 #  02|佐藤|1|0002 # # ・補足:IDは1~1400、count数は1~97、DATAは1~4000位あります。 # # 欲しい結果(_組) :- 欲しい結果(_組,_). 欲しい結果(_組,_残り鍵ならび) :- 鍵ならびを作る(_鍵ならび), 鍵データの収集(_鍵ならび,_組,_残り鍵ならび). 欲しい結果の表示 :- 欲しい結果(_組,_残り鍵ならび), concat_atom(_組,'|',_組表示文字列), writef('%t\n',[_組表示文字列]), _残り鍵ならび = []. 鍵ならびを作る(_鍵ならび) :- findsetof([_ID,_名前],( テーブルデータ(_ID,_名前,_データ)), _鍵ならび). 鍵データの収集(_鍵ならび,_既に処理した鍵ならび,_組,_残り鍵ならび) :- 一つ鍵を取り出し(_鍵ならび,_既に処理した鍵ならび,_鍵,_残り鍵ならび), 鍵に対応するデータならび(_鍵,_鍵に対応するデータならび), 組の構成(_鍵,_鍵に対応するデータならび,_組). 一つ鍵を取り出し(_鍵ならび,_既に処理した鍵ならび,_鍵,_残り鍵ならび) :- append(_既に処理した鍵ならび,[_鍵|_残り鍵ならび],_鍵ならび). 鍵に対応するデータならび(_鍵,_鍵に対応するデータならび) :- _鍵 = [_ID,_名前], findall(_データ,( テーブルデータ(_ID,_名前,_データ)), _鍵に対応するデータならび). 組の構成(_鍵,_鍵に対応するデータならび,_組) :- length(_鍵に対応するデータならび,_度数), append(_鍵,[_度数|_鍵に対応するデータならび],_組). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/762 # # ●正規表現の使用環境 # MySQL4.1のREGEXP # ●検索か置換か? # 検索 # ●説明 # カラム内に <> を含むテキストデータがあるのですが # 調べたい数字が入っているかを調べたい # # ●対象データ # 3<>4 # 5<>32<>2 # 5<>3<>6 # 3 # 4 # # この中から3を含むものを検索したい(32はヒットしないように) # # ●希望する結果 # 3<>4 # 5<>3<>6 # 3 # # 'カラム内に <> を含むテキストデータがあるのですが調べたい数字が入っているかを調べたい'(_カラムならび,_調べたい数字,_適合カラム) :- append(_,[_カラム|_],_カラムならび), 調べたい数字が入っているか(_カラム). 調べたい数字が入っているか(_,_調べたい数字) :- !. 調べたい数字が入っているか(_カラム,_調べたい数字) :- split(_カラム,['<>'],L), append(_,[_調べたい数字|_],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/230 # # ・DBMS名とバージョン # oracle11g # # ・テーブルデータ # userテーブル # # id int # name varchar # # ・欲しい結果&説明 # idを外からバインド変数で渡し、 # IDが一致するレコードと、 # その一致したレコードとnameが一致するレコードの2レコードを取得したいです。 # # 例) # バインド変数:1 # id  name # 1   aaa # 2   bbb # 3  aaa # idが1と3のレコードを抽出したいです。 # # 自己結合して1レコードとして取得することはできるのですが2レコード取得する方法が思いつきません。 # 宜しくお願いします。 # # # 'idを外からバインド変数で渡し、IDが一致するレコードと、その一致したレコードとnameが一致するレコードの2レコードを取得したい'(_外からのバインド変数,_IDが一致するレコード,_その一致したレコードとnameが一致するレコード) :- userテーブル(_外からのバインド変数,_name), userテーブル(_id,_name), \+(_id = _外からのバインド変数), _IDが一致するレコード = [_外からのバインド変数,_name], _その一致したレコードとnameが一致するレコード = [_id,_name]. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/221 # # DBMSはMysqlの5.0.87です。 # # +------+------------+---------+----------+ # | id   | product_id | assy_id | parts_id | # +------+------------+---------+----------+ # |    1 |          1 |      12 |        1 | # |    2 |          1 |      12 |        2 | # |    3 |          1 |      12 |        3 | # |    4 |          1 |      12 |        3 | # |    5 |          1 |      12 |        5 | # +------+------------+---------+----------+ # # 上記のテーブルで、product_id、assy_id、parts_idが同じレコードが2行以上有るものを抽出したいのです。 # 上記の例だとidが3と4のレコードになります。 # # # '上記のテーブルで、product_id、assy_id、parts_idが同じレコードが2行以上有るものを抽出する'(_id) :- findsetof([_product_id,_assy_id,_parts_id],( テーブル(_id,_product_id,_assy_id,_parts_id)), LL), append(_,[[_product_id,_assy_id,_parts_id]|_],LL), count(テーブル(_,_product_id,_assy_id,_parts_id),Count), Count >= 2. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/196 # # PHPでMySQLかsqlite3を使おうと思っています。 # 表の先頭に新しい行を追加して、行の総数が指定した数(たとえば10)よりも多くなった場合は # 多くなった分を表の末尾から削除して行数を一定以上に増やさないようにしたいのですがどうすればいいですか? # ロケット鉛筆みたいに最大数が決まっていてはみ出たら押し出すみたいなことをしたいです。 # 表の先頭に追加して上限を超えたら最後尾から削除するんじゃなくて # 表の最後尾に追加して上限を超えたら先頭から削除するのでもいいです。 # どちらのほうが簡単かどうかもわかっていませんがよろしくお願いします。 # # '表の先頭に新しい行を追加して、行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して行数を一定以上に増やさないようにしたい'(_テーブル名,_行) :- length(_行,_列数), '表の先頭に新しい行を追加して'(_テーブル名,_行), '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(10,_テーブル名,_列数). '表の先頭に新しい行を追加して'(_テーブル名,_行) :- P =.. [_テーブル|_組み], asserta(P),!. '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_限界数,_テーブル名,_列数) :- length(L,_列数), P =.. [_テーブル名|L], count(P,_現在の行数), '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数). '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数) :- _現在の行数 =< _限界数,!. '行の総数が指定した数(たとえば10)よりも多くなった場合は多くなった分を表の末尾から削除して'(_現在の行数,_限界数,_テーブル名,_列数) :- _現在の行数 > _限界数, 'retractしながら全行を回収する'(_テーブル名,_列数,_項ならび), 多くなった分を表の末尾から削除して(_限界数,_項ならび,_末尾を削除された項ならび), assertz_all(_末尾を削除されたこうならび). 'retractしながら全行を回収する'(_テーブル名,_列数,_項ならび) :- length(L1,_列数), P =.. [_テーブル名|L1], findall(P,retract(P),_項ならび),!. 多くなった分を表の末尾から削除して(_限界数,_項ならび,_末尾を削除された項ならび) :- length(L,_限界数), append(_末尾を削除された項ならび,_,_項ならび). assertz_all([]). assertz_all([_項|R]) :- assertz(_項), assertz_all(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/678 # # point順に並び替え、ランクを表示する # # テーブル名 :tbl_point # フィールド名:point # name # gender # # 表示    :p_rank, name, gender, point # # select rank() over (order by [point] desc) as [p_rank], name, point from [tbl_point]; # # p_rank | name | gender | point # # 1 | hoge | 1 | 98 # 2   | fuga | 2 | 80 # 3  | poyo | 2 | 70 # 4  | boke | 1 | 60 # # ここまではできるのですが # # p_rank | mp_rank | wp_rank | name | gender | point # # 1 | 1 | | hoge | 1 | 98 # 2 | | 1 | fuga | 2 | 80 # 3  | | 2 | poyo | 2 | 70 # 4  | 2 | | boke | 1 | 60 # # gender毎のも表示するにはどうすればいいですか? # 'gender毎のも表示する' :- ランクの作成(LL_R,LL1_R,LL2_R), write('p_rank | mp_rank | wp_rank | name | gender | point\n\n'), append(L0,[[_point,_gender,_name]|R],LL_R), 性別ランクを得る(LL1_R,LL2_R,_name,_gender,_mp_rank), 表示する(L0,_point,_name,_gender,_mp_rank), R = []. ランクの作成(LL_R,LL1_R,LL2_R) :- ポイントランクの作成(LL_R), 男性ランクの作成(LL1_R), 女性ランクの作成(LL2_R). ポイントランクの作成(LL_R) :- findall([_point,_name,_gender],( tbl_point(_point,_name,_gender)), LL), rsort(LL,LL_R),!. 男性ランクの作成(LL1_R) :- findall([_point,_name],( tbl_point(_point,_name,1)), LL1), rsort(LL1,LL1_R). 女性ランクの作成(LL2_R) :- findall([_point,_name],( tbl_point(_point,_name,2)), LL2), rsort(LL2,LL2_R), 性別ランクを得る(LL1_R,LL2_R,_name,1,_rank) :- nth1(_rank,LL1_R,[_,_name]),!. 性別ランクを得る(LL1_R,LL2_R,_name,2,_rank) :- nth1(_rank,LL2_R,[_,_name]),!. 表示する(L0,_point,_name,1,_mp_rank) :- length([_|L0],_p_rank), writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,_mp_rank,' ',_name,1,_point]),!. 表示する(L0,_point,_name,2,_wp_rank) :- length([_|L0],_p_rank), writef('%7l|%9c|%9c|%6c|%8c|%6r\n',[_p_rank,' ',_wp_rank,_name,2,_point]),!. rsort(L1,L2) :- sort(L1,L3), reverse(L3,L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/155 # # SQL命令で表(TABLE)を作る # 1、本(コード・題名・著者名・出版社名・価格・在庫冊数) # # 2、出納(費用・本のコード・冊数・日付) # # 3、顧客(顧客コード・氏名・連絡先) # # 4、予約本(顧客コード・本のコード・予約日付・入荷日付) # # このまんまの問題がでたんだけど意味が全く分からない # # テーブル構造を定義する(_定義文文字列) :- split(_定義文文字列,['(',')','・'],[_テーブル名|_属性名ならび]), append(L0,[_属性名|R],_属性名ならび), length([_|L0],_属性番号], _テーブル構造 =.. [_テーブル構造,_テーブル名,_属性番号,_属性名], assertz(_テーブル構造), R = [],!. ?- テーブル構造を定義する('本(コード・題名・著者名・出版社名・価格・在庫冊数)'). ?- テーブル構造を定義する('出納(費用・本のコード・冊数・日付)'). ?- テーブル構造を定義する('顧客(顧客コード・氏名・連絡先)'). ?- テーブル構造を定義する('予約本(顧客コード・本のコード・予約日付・入荷日付)'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/153 # # if select * from t where id=1 # then update t set foo=bar where id=1 # # これをSQLで表現したいのですが可能でしょうか? # # 'if select * from t where id=1 then update t set foo=bar where id=1' :- '1要素のupdate'(t,id1,'1',foo,bar). '1要素のupdate'(_テーブル名,_鍵属性名,_鍵値,_置換属性名,_置換する値) :- 組構造を得る(_テーブル名,_属性名ならび), 鍵値を設定された項を作る(_テーブル名,_属性ならび,_鍵属性名,_鍵値,_現在の組,P), 置換する値を設定された項を作る(_テーブル名,_属性ならび,_置換属性名,_置換する値,_置換する組,_置換する項), retract(_現在の項), '置換される組の変数部分だけ元の値に単一化する'(_現在の組,_置換する組), asserta(_置換する項). 組構造を得る(_テーブル名,_属性名ならび) :- findall([_属性番号,_属性名],( テーブル構造(_テーブル名,_属性番号,_属性名)), L1), sort(L1,L2), findall(_属性名,( member([_,_属性名],L2)), _属性名ならび). 置換する値を設定された項を作る(_テーブル名,_属性ならび,_置換属性名,_置換する値,_置換する組,_置換項) :- 置換する組(_属性名ならび,_置換する組), 置換する値を置換する組に設定(_属性名ならび,_置換属性名,_置換する値,_置換する組), _置換項 =.. [_テーブル名|_置換する組]. 鍵値を設定された項を作る(_テーブル名,_属性ならび,_鍵属性名,_鍵値,_現在の組,_現在の項) :- 現在の組(_属性名ならび,_現在の組), 鍵を現在の組に設定(_属性名ならび,_鍵属性名,_鍵値,_現在の組), _現在の項 =.. [_テーブル名|_現在の組]. 現在の組(_属性名ならび,_現在の組) :- length(_属性名ならび,Len), length(_現在の組,Len). 置換する組(_属性名ならび,_置換する組) :- length(_属性名ならび,Len), length(_置換する組,Len). 鍵を現在の組に設定(_属性名ならび,_鍵名,_鍵値,_現在の組) :- nth1(_鍵属性名の位置,_属性名ならび,_鍵属性名), nth1(_鍵属性名の位置,_現在の組,_鍵値),!. 置換する値を置換する組に設定(_属性名ならび,_置換属性名,_置換する値,_置換する組) :- nth1(_置換属性名の位置,_属性名ならび,_鍵属性名), nth1(_鍵属性名の位置,_置換する組,_鍵値),!. '置換する組の変数部分だけ元の値に単一化する'([],[]). '置換する組の変数部分だけ元の値に単一化する'([A|R1],[A|R2]) :- '置換する組の変数部分だけ元の値に単一化する'(R1,R2). '置換する組の変数部分だけ元の値に単一化する'([A|R1],[B|R2]) :- \+(A = B), '置換する組の変数部分だけ元の値に単一化する'(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/147 # # 特定のidが持つintカラムから最も近いかつ小さい数字を持つidを求めたいのですが、 # # select id from t1 where int_col < (select int_col from t1 where id=特定のid) order by int_col desc # でできたのですが # もっとよいSQLありませんか? # # '特定のidが持つintカラムから最も近いかつ小さい数字を持つidを求める'(_id,_id_2) :- t1(_id,_int_col), findmax([_int_col_x,_id_x],( t1(_id_x,_int_col_x), _int_col_x < _int_col), [_int_col_2,_id_2]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/133 # # SQLの質問です。 # # DBMSはOracle11gR2です。 # # MST_A # # ID VALUE # ---- ----- # 1 MA1 # 2 MA2 # 3 MA3 # # MST_B # # ID1 ID2 VALUE # ---- ---- ----- # 1 1 MB1 # 2 2 MB2 # 3 3 MB3 # # DAT_A # # ID1 ID2 VALUE # ---- ---- ----- # 1 1 DA1 # 2 DA2 # 3 4 DA3 # # # SELECT # ma.VALUE,mb.VALUE.da.VALUE # FROM # MST_A ma,MST_B mb,DAT_A da # WHERE da.ID1 = ma.ID # AND ma.ID = mb.ID1 # AND da.ID2 = mb.ID2; # # のSQL結果に、 # DAT_AのID2がnullになっているデータ(VALUE=DA2) # を含めたいのです。 # # MST_AとMST_Bはデータ件数が非常に多い(1〜2億件)ので、 # できればUNIONで複数回読み込むのは避けたいです。 # # アドバイスよろしくお願いいたします。 # # 求める結果(_VALUE_A,_VALUE_B,_VALUE_D) :- 'MST_A'(_ID,_VALUE_A), 'MAT_B'(_ID,_ID2_B,_VALUE_B), 'MST_D'(_ID,_ID2_D,_VALUE_D), 条件_1(_ID2_B,_ID2_D). 条件_1(_ID2_B,'NULL') :- !. 条件_1(_ID2,_ID2) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/136 # # SQLserverの質問です # # 以下のようなテーブルがあります # *はユニークキーです。 # # DATE* ID1* ID2* VALUE # _______________ # # 200103 AAA 111 20 # 200103 AAA 112 10 # 200103 AAA 113 55 # 200103 AAA 121 60 # 200103 AAA 122 54 # 200103 AAA 123 44 # 200103 BBB 111 24 # 200103 BBB 113 43 # 200103 BBB 114 11 # 200103 BBB 121 11 # ・ # ・ # ・ # 200104 AAA 111 20 # 200104 AAA 112 10 # 200104 AAA 114 5 # 200104 AAA 122 54 # 200104 AAA 123 4 # 200104 BBB 111 24 # 200104 BBB 113 43 # 200104 BBB 112 21 # 200104 BBB 121 11 # 200105 AAA 122 54 # 200105 BBB 113 43 # 200105 BBB 112 21 # 200106 AAA 123 4 # 200106 BBB 111 24 # 200106 BBB 112 21 # # これをDATE=200103とDATE=200104だけとってきて # いかのように外部結合したいのですがどのようにすればよいでしょうか? # FULL JOINを利用したのですがうまくいきません。 # # ID1 ID2 VALUE_201103 VALUE_201104 # _________________________________________ # AAA 111 20 20 # AAA 112 10 10 # AAA 113 55 NULL # AAA 114 NULL 5 # AAA 121 60 NULL # ・ # ・ # ・ # # よろしくお願いいたします。 # # '以下のようなテーブルがあります *はユニークキーです。 DATE* ID1* ID2* VALUE これをDATE=200103とDATE=200104だけとってきて外部結合する'(_ID1,_ID2,_VALUE_200103,_VALUE_200104) :- findsetof([_ID1,_ID2],( テーブル(_日付,_ID1,_ID2,_), '日付が200103か200104'(_日付)), LL1), append(_,[[_ID1,_ID2]|_],LL1), '日付が200103か200104の適合組'(_ID1,_ID2,_VALUE_200103,_VALUE_200104). '日付が200103か200104'('200103'). '日付が200103か200104'('200104'). '日付が200103か200104の適合組'(_ID1,_ID2,_VALUE_200103,_VALUE_200104) :- テーブル('200103',_ID1,_ID2,_VALUE_200103), テーブル('200104',_ID1,_ID2,_VALUE_200104),!. '日付が20103か200104の適合組'(_ID1,_ID2,'NULL',_VALUE_200104) :- \+(テーブル('200103',_ID1,_ID2,_)), テーブル('200104',_ID1,_ID2,_VALUE_200104),!. '日付が200103か200104の適合組'(_ID1,_ID2,_VALUE_200103,'NULL') :- テーブル('200103',_ID1,_ID2,_VALUE_2001003), \+(テーブル('200104',_ID1,_ID2,_)),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1316769778/113 # # 助けて下さい頭がパンクしそうです。 # # CARD # |CARDID|HOWMANYLEVEL| # |   1 |        | # |   2 |        | # # CARDLEVEL # |CARDID|LV1|LV2|LV3|LV4|LV5| # |   1 |0 | 0| 23 | 28 | 0|  # |   2 |0 | 0| 0 | 30 | 55| # |   1 |0 | 0| 25 | 29 | 0| # # CARDテーブルの HOWMANYLEVELに # CARDLEVELから0以外の個数を入れたいです。 # CARDLEVELのCARDIDは複数あります。 # # 'CARDテーブルの HOWMANYLEVELにCARDLEVELから0以外の個数を入れたいです。CARDLEVELのCARDIDは複数あります' :- 'CARD'(_CARDID,_), findall(Count,( 'CARDLEVEL'(_CARDID,_LV1,_LV2,_LV3,_LV4,_LV5), count(( member(LV,[_LV1,_LV2,_LV3,_LV4,_LV5]), \+(LV=0)), Count)), L), sum(L,_HOWMANYLEVEL), retract('CARD'(_CARDID,_)), assertz('CARD'(_CARDID,_HOWMANYLEVEL)), fail. 'CARDテーブルの HOWMANYLEVELにCARDLEVELから0以外の個数を入れたいです。CARDLEVELのCARDIDは複数あります'. % 以下のサイトは # SQL質疑応答スレ 12問目 #41 # ・DBMS名とバージョン : SQL-Server 2008 # # 売り上げ # ID | AMOUNT     | # --+---------------------- # 1,200 # 1,300 # 1,400 # 2,100 # 4,100 # 5,200 # 5,300 # 6,400 # # 得意先マスタ # ID | NAME     | OYA_CODE # --+----------------------+-------------- # 1,abc商事 本店,1 # 2,abc商事 い支店,1 # 3,abc商事 う支店,1 # 4,def工務店 本店,4 # 5,def工務店 い支店,4 # 6,ghiサービス,6 # 7,jklシステム,7 # # ・欲しい結果 # 1,abc商事 本店,900 # 4,def工務店 本店,600 # 6,ghiサービス,6 # 7,jklシステム,400 # # ・説明 # 会社ごとに、売り上げ合計を出したいです。 # 得意先マスタに親会社コードを持っているので、親会社がある場合は親会社に合算したいです。 # 自分が親会社の場合は自らのコードが入っています。 # 売上('1',200). 売上('1',300). 売上('1',400). 売上('2',100). 売上('4',100). 売上('5',200). 売上('5',300). 売上('6',400). 得意先マスター('1',abc商事本店,'1'). 得意先マスター('2',abc商事い支店,'1'). 得意先マスター('3',abc商事う支店,'1'). 得意先マスター('4',def工務店本店,'4'). 得意先マスター('5',def工務店い支店,'4'). 得意先マスター('6',ghiサービス,'6'). 得意先マスター('7',jklシステム,'7'). '会社ごとに、売り上げ合計を出す' :- 親会社ならび(_親会社ならび), 親会社ごとの合計ならび(_親会社ならび,_親会社ごとの合計ならび), 表示する(_親会社ごとの合計ならび). 親会社ならび(_親会社ならび) :- setof(_OYA_CODE,( [_ID,_NAME,_OYA_CODE] ^ 得意先マスター(_ID,_NAME,_OYA_CODE)),_親会社ならび). 親会社ごとの合計ならび(_親会社ならび,_親会社ごとの合計ならび) :- findall([_OYA_CODE,_合計],( 親会社の合計(_親会社ならび,_OYA_CODE,_NAME,_合計)),_親会社ごとの合計ならび). 親会社の合計(_親会社ならび,_OYA_CODE,_NAME,_合計) :- member(_OYA_CODE,_親会社ならび), 子会社の全合計を得る(_OYA_CODE,_NAME,_合計). 子会社の全合計を得る(_OYA_CODE,_NAME,_合計) :- 子会社ならびを得る(_OYA_CODE,_子会社ならび), findsum(_AMOUNT,子会社の売上(_子会社ならび,_ID,_AMOUNT),_合計). 子会社ならびを得る(_OYA_CODE,_子会社ならび) :- setof(_ID,[_ID,_NAME,_OYA_CODE] ^ 得意先マスター(_ID,_NAME,_OYA_CODE),_子会社ならび). 子会社の売上(_子会社ならび,_ID,_AMOUNT) :- member(_ID,_子会社ならび), 売上(_ID,_AMOUNT). 表示する([]). 表示する(LL) :- 売上合計が0でないものの表示を続ける(LL). 売上合計が0でないものの表示を続ける([[_OYA_CODE,0]|R]) :- 売上合計が0の時は飛ばして表示を続ける(R). 売上合計が0でないものの表示を続ける([[_OYA_CODE,_合計]|R]) :- 売上合計を表示する(_OYA_CODE,_合計,R). 売上合計が0の時は飛ばして表示を続ける(R) :- 表示する(R). 売上合計を表示する(_OYA_CODE,_合計,R) :- \+(_合計=0), writef('%w,%w\n',[_OYA_CODE,_合計]), 表示する(R). findsum(A,B,C) :- findall(A,B,L), sum_list(L,C). % 以下のサイトは # http://stackoverflow.com/questions/7540952 # 私は、プロローグでの単純な問題にこだわっている。プログラムを考えてみましょう # # 労働者(手形)。 # 労働者(smitt)。 # 労働者(フレッド)。 # 労働者(ダニー)。 # 労働者(ジョン)。 # 車(BMW)。 # 車(マツダ)。 # 車(アウディ)。 # 所有者(フレッド、マツダ)。 # 所有者(ダニー、BMW)。 # 所有者(ジョン、アウディ)。 # ?- no_car(X) - :私たちが入力するクエリをした場合、ワーカーXがない車、 # すなわち、持っていない場合にtrueとなる複数の述語no_car(X)を、 # 追加する必要があります。プロローグは、答える必要があります # # X = smitt、 # X =手形、 # はい # 私が行っていることです。 # # hascar(X): - 所有者(X、_)。 # nocar(X): - 労働者(X)ではなく、hascar(X)。 # anonimous変数は、クエ??リだけで使用可能なのでしかし、このアプローチは # 動作しません。だから、私は本当にこの上こだわっている。 # 私は、クエリでこのロジックを表現できるようにSQL内の単語を"NOT EXISTSを"が、 # プロローグのそれらに類似したものがあるがあると知っていますか? # 私は、プロローグでの単純な問題にこだわっている。プログラムを考えてみましょう 労働者(bill). 労働者(smitt). 労働者(fred). 労働者(dany). 労働者(john). 車('BMW'). 車(マツダ). 車(アウディ). 所有者(fred,マツダ). 所有者(dany,'BMW'). 所有者(john,アウディ). 労働者で車を所有していない(_労働者) :- 労働者(_労働者), 車を所有していない(_労働者). 車を所有していない(_所有者) :- \+(車を所有している(_所有者)). 車を所有している(_所有者) :- 車(_所有種類), 所有者(_所有者,_所有種類). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/968 # # # テーブル A: フィールド t, r # テーブル B: フィールド p, t # # テーブル B から p の値を指定して t の値を読み込みたいです。 # これだけなら select t from B where p = hoge で済むと思います。 # # さらに条件を追加して、テーブルAにおいて t の値がそれに等しいようなレコードの数が最小なものを選ぶにはどのようにすればよいでしょうか? # # 例えば # テーブルAが (0, 1), (0, 2), (0, 3), (1, 1), (1, 2) # テーブルBが (0, 0), (0, 1), (1, 0), (1, 1), ... # となっていたら # (0), (1) # ではなく # (1) # だけを得たいです。 # # 'テーブル A: フィールド t, r テーブル B: フィールド p, t テーブル B から p の値を指定して t の値を読み込み テーブルAにおいて t の値がそれに等しいようなレコードの数が最小なものを選ぶ'(_p,_t) :- findall([Count,_t],( 'B'(_p,_t), count('A'(_t,_r),Count)), L), min(L,[Count,_]), member([Count,_t],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/953 # # よろしくお願いします # # MySQLでint型でstartとendというフィールドがあります。start < endとなっています。 # n以上m以下の範囲が、テーブルのstart以上end以下の範囲と被ってるレコードを取り出す場合、 # SELECT文の条件はどうなるのでしょうか? # # 'int型でstartとendというフィールドがあります。start < endとなっています。n以上m以下の範囲が、テーブルのstart以上end以下の範囲と被ってるレコードを取り出す' :- テーブル(_start,_end), 'n以上m以下の範囲が、テーブルのstart以上end以下の範囲と被ってる'(_n,_m,_start,_end). 'n以上m以下の範囲が、テーブルのstart以上end以下の範囲と被ってる'(_n,_m,_start,_end) :- _n =< _end, _m >= _start,!. 'n以上m以下の範囲が、テーブルのstart以上end以下の範囲と被ってる'(_n,_m,_start,_end) :- _n =< _end, _m >= _start,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/941 # # DBMS : Mysql # # 説明 # データは10万件あると想定します。 # 挿入する際に一つのワードを二つのカラムに大して重複チェックを行いたいです。 # どちらか片方にそのワードが含まれていたらcountで0を返す結果が欲しいです。 # # select count(*) from table where colA = 'ワード' OR colB = 'ワード' # これだと現在2秒程度かかるので高速化したいです。 # # よろしくお願いします。 # # '挿入する際に一つのワードを二つのカラムに大して重複チェックを行いたいです。どちらか片方にそのワードが含まれていたらcountで0を返す結果が欲しい'(_ワード,_colA,_colB) :- 'どちらか片方にそのワードが含まれていたらcountで0を返す結果が欲しい'(_ワード,_colA,_colB), assertz(table(_colA,_colB)). 'どちらか片方にそのワードが含まれていたらcountで0を返す結果が欲しい'(_ワード,_colA,_colB) :- count(( table(_colA,_colB), どちらかに片方にワードが存在(_ワード,_colA,_colB,Count)), 0). どちらかに片方にワードが存在(_ワード,_ワード,_) :- !. どちらかに片方にワードが存在(_ワード,_,_ワード) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/924 # # # 外部結合したテーブルに内部結合ってできます? # 例 # A 契約テーブル # B 顧客テーブル # C コードテーブル # # パターン1 # select # A.key # B.bangou # C.code # from # A.key = B.key(+) # B.code_key = C.code_key # # Bが存在しない場合 B.bangou、C.codeはNULLでとれてほしい # 無理でしょうか? # '外部結合したテーブルに内部結合'(_A_key,_B_bango,_c_code) :- 契約テーブル(_A_key), 顧客テーブル_1(_B_key,_B_code_key,_B_bango), _A_key = _B_key, コードテーブル_1(_c_code_key,_c_code), _B_code_key = _c_code_key. 顧客テーブル_1(_B_key,_B_code_key,_B_bango) :- 顧客テーブル(_B_key,_B_code_key,_B_bango),!. 顧客テーブル_1(_B_key,[],[]). コードテーブル_1(_c_code_key,_c_code) :- コードテーブル(_c_code_key,_c_code). コードテーブル_1([],[]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/890 # # 初心者ですが失礼いたします。 # ID | DATA | TIME # --+------ # 1 | aaa | 01:02 # 2 | bbb | 03:42 # 1 | ccc | 02:11 # 3 | bbb | 01:32 # # というデータがあるとしまして # タイムが早い順に並べ替えて重複するIDを除外(この場合は1) # するにはどのようなクエリを書けばよいのでしょうか? # # select * from table ORDER BY `time` DESC # でタイム順には並べることができていますが重複するID(人物) # を除外したいのです。 # # % findsetof/3 % findmin/3 % を参照してください。 'タイムが早い順に並べ替えて重複するIDを除外する'(_ID,_DATA,_TIME) :- findsetof(_ID,( テーブル(_ID,_DATA,_TIME)), L1), append(_,[_ID|_],L1), findmax([_TIME,_ID,_DATA],( テーブル(_ID,_DATA,_TIME)), [_TIME,_ID,_DATA]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/884 # # 初心者質問ですみませんが、よろしくお願いします。 # # ・Oracle11g # 【テーブルデータ】 # ID | DATA # --+------ # 1 | aaa # 1 | bbb # 1 | ccc # 2 | bbb # # ID2に同一データが存在しないID1のデータだけ抽出したいのです。 # 上記例の場合、「aaa」「ccc」を結果としてほしい。 # よろしくお願いします。 # 'IDが2の時にDATAに同一データが存在しないID1のデータだけ抽出する'(_DATA) :- テーブルデータ(1,_DATA), \+(テーブルデータ(2,_DATA)). % 以下のサイトは # # Prologデータベースを使い失敗駆動で素数を求める。 # 'm以下の素数'/2は非決定性。全解を得るにはfindall/3を使う。 # :- dynamic('$1'/1). 'm以下の素数'(_m,_素数) :- abolish('$1'/1), 素数候補をデータベースに登録(_m), '$1'(N), '$1'(M), 'm以下の素数'(M,N,_素数). 'm以下の素数'(N,N,N). 'm以下の素数'(M,N,_) :- 'MがNで割り切れたらデータベースから削除'(M,N), fail. 'MがNで割り切れたらデータベースから削除'(M,N) :- 0 is M mod N, retract('$1'(M)),!. 素数候補をデータベースに登録(_m) :- for(2,N,_m), assertz('$1'(N)), N = _m. 'm以下の素数をすべてリストに得る'(_m,L) :- findall(_素数,'m以下の素数'(_m,_素数),L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/860 # # 09/01 りんご # 09/02 りんご # 09/02 みかん # 09/03 りんご # 09/03 みかん # 09/03 バナナ # ・・・ # # このようなテーブルからりんごとみかんとバナナの3つ # 全てがある日付を取り出す構文はどうすれば出来ますか? # # '09/01 りんご\n09/02 りんご\n09/02 みかん\n09/03 りんご\n09/03 みかん\n09/03 バナナ\n・・・ このようなテーブルからりんごとみかんとバナナの3つ全てがある日付を取り出す'(_日付) :- findsetof(_日付,( テーブル(_日付,_)), L1), 'りんごとみかんとバナナの3つ全てがある日付'(L1,_日付). 'りんごとみかんとバナナの3つ全てがある'([_日付|R],_日付) :- 'りんごとみかんとバナナの3つ全てがある'(_日付). 'りんごとみかんとバナナの3つ全てがある'([_|R],_日付) :- 'りんごとみかんとバナナの3つ全てがある'(R,_日付). 'りんごとみかんとバナナの3つ全てがある'(_日付) :- テーブル(_日付,りんご), テーブル(_日付,みかん), テーブル(_日付,バナナ),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/846 # # あるカラムの重複のみを外したものをSELECTするにはどうとればいいですか? # # kadenテーブル # id item price # 1 パソコン 100000 # 2 パソコン 80000 # 3 デジカメ 50000 # 4 プリンター 20000 # 5 デンワ 6000 # # 結果 # 1 パソコン 100000 # 3 デジカメ 50000 # 4 プリンター 20000 # 5 デンワ 6000 # # パソコンを区別するのはidとpriceがありますがidが若い方でお願いします # # 'あるカラムの重複のみを外したものをSELECTする' :- findsetof(_item,( kaden(_id,_item,_price)), L), append(_,[_item|_],L), 第一解のみ取得(_id,_item,_price). 第一解のみ取得(_id,_item,_price) :- kaden(_id,_item,_price),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/839 # # MySQLです。 # テーブルから最初コラムAで並びかえて、その中の上位30個を # コラムBで並び替えた結果がほしい時はどう書けばいいのでしょうか # # SELECT * FROMT T ORDER BY A,B # だと、Aの中の同じ値の物しかBでソートされないみたいです。 # # 'テーブルから最初コラムAで並びかえて、その中の上位30個をコラムBで並び替えた結果がほしい'(_A,_B) :- length(L0,30), findsetof([_A,_B],( 'T'(_A,_B)), L1), sort(L1,L2), append(L0,_,L2), findall([_B,_A],member([_A,_B],L0),L3), sort(L3,L4), member([_B,_A],L4). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/833 # # 下記の2つのテーブルから情報を抽出したいのですが、どのようにすればよいでしょうか? # # ・抽出対象テーブル1構成 # カラム1個目: カラム1A(PK) CHAR型 # カラム2個目: カラム1B CHAR型 # カラム3個目: カラム1C CHAR型 # # ・抽出対象テーブル2構成 # カラム1個目:カラム2A(PK) CHAR型 # カラム2個目:カラム2D(PK) CHAR型 # # ※テーブルの説明 # ・抽出対象テーブル1「カラム1A」と、抽出対象テーブル2「カラム2A」同一の値が設定される # ・"カラム2D"には"01","02","03"・・・"10"の値が設定される # # ・抽出したい情報 # 1個目:カラム1A # 2個目:カラム1B # 3個目:カラム1C # 4個目:カラム2Dの値が"01"のレコードが存在するかのフラグ # 5個目:カラム2Dの値が"02"のレコードが存在するかのフラグ # 6個目:カラム2Dの値が"03"のレコードが存在するかのフラグ # ・・・ # 13個目:カラム2Dの値が"10"のレコードが存在するかのフラグ # # 例えば、以下のように抽出したいのです # # ・抽出対象テーブル1 # 1個目 | 2| 3 # --------+--+----- # 1111111 | a| 1 # 2222222 | b| 2 # 3333333 | c| 3 # 4444444 | d| 4 # 5555555 | e| 5 # # ・抽出対象テーブル2 # 1個目 | 2 # --------+----- # 1111111 | 01 # 1111111 | 02 # 1111111 | 03 # 1111111 | 10 # 2222222 | 01 # 3333333 | 02 # 3333333 | 05 # 4444444 | 03 # # ・抽出したい情報 # 1個目 | 2| 3 | 4| 5| 6| 7| 8| 9|10|11|12|13| # --------+--+---+--+--+--+--+--+--+--+--+--+--+-- # 1111111 | a| 1| 1| 1| 1| 0| 0| 0| 0| 0| 0| 1| # 2222222 | b| 2| 1| 0| 0| 0| 0| 0| 0| 0| 0| 0| # 3333333 | c| 3| 0| 1| 0| 1| 0| 0| 0| 0| 0| 0| # 4444444 | d| 4| 0| 0| 1| 0| 0| 0| 0| 0| 0| 0| # 5555555 | e| 5| 0| 0| 0| 0| 0| 0| 0| 0| 0| 0| # ※4〜13番目のフラグは、"1"が設定あり、"0"が設定なしを示す # # 分かり難い文章で申し訳ございませんが、よろしくお願い致します。 # # 抽出したい情報(L) :- 抽出対象テーブル1(_カラム1A,_カラム1B,_カラム1C), 抽出したい情報の一(_カラム1A,['01','02','03','04','05','06','07','08','09','10'],L1), append([_カラム1A,_カラム1B,_カラム1C],L1,L). 抽出したい情報の一(_,[],[]). 抽出したい情報の一(_カラム2A,[_カラム2D|R1],[1|R2]) :- 抽出対象テーブル2(_カラム2A,_カラム2D),!. 抽出したい情報の一(_1,R1,R2). 抽出したい情報の一(_カラム2A,[_|R1],[0|R2]) :- 抽出したい情報の一(_カラム2A,R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/804 # # 以下のようなテーブルTABがあります。 # # A B C # 1 40 35 # 2 80 50 # 3 10 5 # 4 20 15 # 5 70 60 # # 列Aで昇順にソートして一番小さい値を持つ行を基準に、 # 以下の計算式で列Dを求めたいです。 # # D(n+1)= C(n)× D(n)÷ B(n+1) # nは列Aの順位で求めたい結果は、 # # A B C D # 1 40 35 1 # 2 80 50 0.4375 # 3 10 5 2.1875 # 4 20 15 0.546875 # 5 70 60 0.1171875 # # みたいな感じになります。 # # これってSQLで可能でしょうか? # DBMSはOracle11gR2です。 # # # '列Aで昇順にソートして一番小さい値を持つ行を基準に、以下の計算式で列Dを求めたいです。 D(n+1)= C(n)× D(n)÷ B(n+1)'(L) :- findsetof([_A,_B,_C],'TAB'(_A,_B,_C),LL), LL = [[_A,_B,_C]|R], '以下の計算式で列Dを求める。 D(n+1)= C(n)× D(n)÷ B(n+1)'(R,[_A,_B,_C,1],L). '以下の計算式で列Dを求める。 D(n+1)= C(n)× D(n)÷ B(n+1)'(R,L,L). '以下の計算式で列Dを求める。 D(n+1)= C(n)× D(n)÷ B(n+1)'([[_A_1,_B_1,_C_1]|R],[_A,_B,_C,_D],L) :- _D_1 is _C * _D / _B_1, '以下の計算式で列Dを求める。 D(n+1)= C(n)× D(n)÷ B(n+1)'(R,[_A_1,_B_1,_C_1,_D_1],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/788 # # prd1テーブル # # p_id 商品ID # p_name 商品名前 # ---- # prd2テーブル # # p_id 商品ID # p_date 製造年 # ----- # prd3テーブル # # p_id # p_date # p_frame 種類1 # ---- # prd4テーブル # # p_frame # p_pattern 種類2(0又は1が入る) # ---- # prd1の商品IDとprd2の商品IDは1対Nの関係です。 # prd1の全商品に対して # prd1に対するprd2を抽出(inner join でも where でも)した以下のテーブル # # p_id p_date # 1 2001-01-01 # 1 2001-01-02 # 2 2001-01-01 # 2 2001-01-02 # 2 2001-01-03 # # に対して、prd3とprd4によって抽出したテーブルを結合するときに # 商品IDと製造年をキーに結合したいと思っています。 # # prd3はちなみに # # p_id p_date p_frame # 1 2001-01-01 1 # 1 2001-01-02 2 # 1 2001-01-03 3 # 1 2001-01-04 4 # 3 2001-01-01 5 # # prd4は、 # # p_frame p_pattern # 1 0 # 2 1 # 3 0 # 4 1 # 5 1 # 6 1 # # p_id p_date SUM(p_pattern_0) SUM(p_pattern_1) というテーブルを抽出したいです。 # # 1 2001-01-01 5 2 # 1 2001-01-02 3 NULL # 2 2001-01-01 NULL NULL # # といった感じです。prd1とprd2を結合したモノに、 prd3とprd4を結合したいのです。 # 'prd3とprd4によって抽出したテーブルを結合するときに商品IDと製造年をキーに結合する'(_p_id,_p_date,_sum_p_pattern_0,_sum_p_pattern_1) :- findsetof([_p_id,_p_date],( prd1(_p_id), prd2(_p_id,_p_date)), L1), append(_,[[_p_id,_p_date]|_],L1), prd3(_p_id,_p_date,_p_frame), findsum([_p_pattern_0,_p_pattern_1],( prd4(_p_frame,_p_pattern), p_pattern_x(_p_pattern,_p_pattern_0,_p_pattern_1)), [_sum_p_pattern_0,_sum_p_pattern_1]). p_pattern_x(0,1,0). p_pattern_x(1,0,1). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/759 # # mysqlで # SELECT * FROM table ORDER BY RAND() LIMIT 10;でランダムに抽出できることは分かりました。 # # 今度は # 値によってランダムの表示割合を変えたいんですがいい方法は無いでしょうか # 例えば # PC 値段 \90000 # TV 値段 \60000 # プリンタ 値段 \20000 # のうち、ランダムで2つ表示させるとき # 値段の高いものを比較的多めに乗せたいです。この場合だと、PCとTVを優先的に2つに表示させることになります。 # # '値段の高いものを比較的多めに抽出する'(_取得数,X) :- findall([_値段かけるランダム値,_商品名],( table(_商品名,_値段), _ランダム値 is random(6) + 1, _値段かけるランダム値 is _値段 * _ランダム値), L1), 降順に整列(L1,L3), 取得数分を切り取る(L3,L4), 整列キーを削除(L3,L4), append(_,[X|_],L4). 降順に整列(L1,L3) :- sort(L1,L2), reverse(L2,L3). 取得数分を切り取る(_取得数,L1,L) :- length(L,_取得数), append(L,_,L1). 整列キーを削除([],[]). 整列キーを削除([[_|L]|R1],[L|R2]) :- 整列キーを削除(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/768 # # isnumericについて教えてください # ある項目(文字列型)の値が # 数値のものだけ抽出したいと考えています # isnumericで行おうとしているのですが、 # Access上のリンクテーブルに対してクエリを実行するとOKなのですが # SQLServer上でクエリを実行すと全角スペースのものも数値として抽出してしまいます # # ■環境 # SQLServer2008 R2 # # ■テーブル # W_チェックテーブル # # ■データ # No Aコード # 1 100 # 2 200 # 3 ABC # 4    (全角スペース) # 5 500 # # ■ほしい結果 # 1 100 # 2 200 # 5 500 # # ■SQL # SELECT No,Aコード # FROM W_チェックテーブル # WHERE isnumeric(Aコード) <> 0 # ORDER BY No # # 上のSQLを実行すると # 1 100 # 2 200 # 4    (全角スペース) # 5 500 # # となり全角スペースのレコードが出力されてしまいます # 全角スペースのレコードを除外するにはどうすればよいでしょうか?? # # 'ある項目(文字列型)の値が数値のものだけ抽出したい'(_Aコード) :- W_チェックテーブル(_,_Aコード), 文字列はすべて数字からなる(_Aコード). 文字列はすべて数字からなる(_Aコード) :- atom_chars(_Aコード,Chars), ならびはすべて数字(Chars). ならびはすべて数字からなる([]). ならびはすべて数字からなる([A|R]) :- A @>= '0', A @=< '9', ならびはすべて数字からなる(R). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #754 # 以下のようなテーブルがあるとします。 # [テーブル名:ユーザー] # ユーザーID , NAME # -------- # 1 , hoge # 2 , fuga # 3 , piyo # # [テーブル名:所持品] # ユーザーID , 備品ID # -------- # 1 , 1 # 2 , 1 # 3 , 2 # 2 , 2 # 3 , 3 # 1 , 2 # # [テーブル名:備品] # 備品ID , NAME # -------- # 1 , PC # 2 , 電話 # 3 , プリンタ # # ここから指定した備品、例えばPCと電話を両方持っているユーザーを # 取得したいです。 # DBはmysqlです。よろしくお願いします。 # ユーザー(1,hoge). ユーザー(2,fuga). ユーザー(3,piyo). 所持品(1,1). 所持品(2,1). 所持品(3,2). 所持品(2,2). 所持品(3,3). 所持品(1,2). 備品(1,'PC'). 備品(2,電話). 備品(3,プリンタ). '指定した備品、例えばPCと電話を両方持っているユーザーを取得したい'(_指定された備品名ならび,_ユーザー名) :- ユーザー(_ユーザーID,_ユーザー名), '指定した備品、例えばPCと電話を両方持っている'(_指定された備品名ならび,_ユーザーID). '指定した備品、例えばPCと電話を両方持っている'(_指定された備品名ならび,_ユーザーID) :- ユーザーが持っている備品名ならび(_ユーザーID,_ユーザーが持っている備品名ならび), 指定された備品名ならびの全ての備品をユーザーは持っている(_指定された備品名ならび,_ユーザーが持っている備品名ならび). ユーザーが持っている備品名ならび(_ユーザーID,_ユーザーが持っている備品名ならび) :- findall(_備品名,( ユーザーが持っている備品名(_ユーザーID,_備品名)),_ユーザーが持っている備品名ならび). ユーザーが持っている備品名(_ユーザーID,_備品名) :- 所持品(_ユーザーID,_備品ID), 備品(_備品ID,_備品名). 指定された備品名ならびの全ての備品をユーザーは持っている(_指定された備品名ならび,_ユーザーが持っている備品名ならび) :- forall(member(_備品名,_指定された備品名ならび),member(_備品名,_ユーザーが持っている備品名ならび)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/506 # # 日本語が下手なので、質問し直し。 # # データベースには、書名、出版社、著者、ISBN番号はいずれもデータが入っている。 # # 検索ページはWEBページ上に作る。TEXT入力欄を4箇所配置する。 # 検索者は、上記4項のうち、書名もしくは出版社等、分かっているものしか入力できないので、どの項目に検索単語が入力されているかは、検索毎に変わる。 # # 入力のある・なしの組み合わせは2の4乗になる。 # # このような場合に、SELECT文は、どう書き下すように作るのでしょうか。 # # 全項目が埋まっていれば、アンドを使って簡単に書けるのですが。。。 # # 'SQLのwhere句の生成'(_入力データならび,_where句) :- findall(_属性名=_値_1,( append(_,[[_属性名,_値]|_],_入力データならび), concat_atom(['\'',_値,'\''],_値_1)), L), concat_atom(L,' and ',_where句). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/730 # # MySQLで、以下のような2つのテーブルがあり、parent_idはparentの外部キーとなってます。 # # parent # id p_value # 1 AAA # 2 BBB # # children # parent_id c_value # 1 aaa # 1 bbb # 1 ccc # 2 ddd # 2 eee # # これを # # parent_id p_value c_value # 1 AAA (aaa, bbb, ccc) # 2 BBB (ddd, eee) # # のような形で取り出すことはできますか? # GROUP BYでparent_idでまとめることはできたのですが、c_valueをまとめて取り出す方法がわかりません。 # # 結合情報を一行に纏める(_parent_id,_p_value,_子供の名前ならび) :- findsetof(_parent_id,( parent(_parent_id,_)), _親の名前ならび), append(_,[_parent_id|R],_親の名前ならび), parent(_parent_id,_p_value), findall(c_value,( children(_parent_id,_c_value)), _子供の名前ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/721 # # ユーザ毎に各商品を何点購入、合計何点購入したかを集計するSQLがうまく書けず悩んでおります。 # 下記のようなテーブルを想定しております。 # # Shohinテーブル # 商品id, 商品名 # sid, sname # 1, "商品A" # 2, "商品B" # 3, "商品C" # 4, "商品D" # # Userテーブル # ユーザid, ユーザ名 # uid, uname # 1, "ユーザA" # 2, "ユーザB" # 3, "ユーザC" # # Rirekiテーブル(購入履歴) # rid,uid, sid, kazu # 1, 2, 3, 2 # 2, 1, 1, 1 # 3, 3, 2, 4 # # Shohinテーブルの商品,Userテーブルのユーザは追加・削除される可能性があります。 # # このような場合に下のように集計結果を得るにはどのようなSQLを書けばよいでしょうか。 # # 集計結果 # ユーザ名 商品A 商品B 商品 商品D … 合計 # ユーザA 1 2 0 2 5 # ユーザB 3 1 2 2 8 # ユーザC 0 2 0 0 2 # … # # 使用予定のデータベースはMySQL 5.0です。 # 何卒よろしくお願い致します。 # # 'ユーザ毎に各商品を何点購入、合計何点購入したかを集計する' :- 見出し表示, 行表示フォーマット(_行表示フォーマット), forall( 'ユーザ毎に各商品を何点購入、合計何点購入したかを集計する'(_行表示フォーマット,_uname,_商品合計ならび,_ユーザ毎総合計), ユーザ合計表示(_行表示フォーマット,_uname,_商品合計ならび,_ユーザ毎総合計)). 'ユーザ毎に各商品を何点購入、合計何点購入したかを集計する'(_行表示フォーマット,_uname,_商品合計ならび,_ユーザ毎総合計) :- ユーザ毎に(_uid,_uname), findall(_何点,( '各商品を何点購入、'(_uid,_何点)), _各商品何点), 合計何点購入したか(_各商品何点,_合計何点). ユーザ毎に(_uid,_uname) :- user(_uid,_uname). '各商品を何点購入、'(_uid,_何点) :- shohin(_sid,_), findsum(_kazu,( rireki(_,_uid,_sid,_kazu), _何点). 合計何点購入したか(_各商品何点,_合計何点) :- sumlist(_各商品何点,_合計何点). 見出し表示 :- 見出し項目ならび(_見出し項目ならび), 見出し表示フォーマット(_見出し表示フォーマット), writef(_見出し表示フォーマット,_見出し項目ならび). 見出し項目ならび(_見出し項目ならび) :- findall(_sname,( shohin(_sid,_sname)), _商品名ならび), append(_商品名ならび,[合計],_見出し項目ならび). 見出し表示フォーマット(_見出し表示フォーマット) :- findall('%8r',shohin(_,_),L1), atomic_list_concat(L1,S1), atomic_list_concat([' ',S1,'%8r'],_見出し表示フォーマット). 行表示フォーマット(_行表示フォーマット) :- findall('%8r',shohin(_,_),L1), atomic_list_concat(L1,S1), atomic_list_concat(['%8l',S1,'%8r\n'],_行表示フォーマット). ユーザ合計表示(_行表示フォーマット,_uname,_商品合計ならび,_ユーザ毎総合計) :- append([_uname|_商品合計ならび],[_ユーザ毎総合計],L), writef(_行表示フォーマット,L),!. findsum(_選択項,_項,_合計値) :- findall(_選択項,_項,_値ならび), sumlist(_値ならび,_合計値),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/666 # # id id2 hoge # 1 1 a # 2 1 b # 3 1 c # 4 1 d # 5 2 a # 6 2 b # # こんなテーブルにselect * from test group by id2とやると # 4 1 d # 6 2 b # # が出ますが最初に登録した # 1 1 a # 5 2 b # # と出したいのですがどうしたらいいでしょうか? # # test(1,1,a). test(2,1,b). test(3,1,c). test(4,1,d). test(5,2,a). test(6,2,b). 'testテーブル上の、id2をキーにグループ参照をしてキー値を持つ最初の組のみを取り出す'(_id1,_id2,_hoge) :- 'testテーブル上の、id2をキーにグループ参照をして'(_キーならび), 'testテーブル上の、キー値を持つ最初の組のみを取り出す'(_キーならび,_id1,_id2,_hoge). 'testテーブル上の、id2をキーにグループ参照をして'(_キーならび) :- setof(_id2,[_id1,_id2,_hoge] ^ test(_id1,_id2,_hoge),_キーならび). 'testテーブル上の、キー値を持つ最初の組のみを取り出す'([_キー|R],_id1,_id2,_hoge) :- 'testテーブル上の、最初の組のみを取り出す'(_キー,_id1,_id2,_hoge). 'testテーブル上の、キー値を持つ最初の組のみを取り出す'([_|R],_id1,_id2,_hoge) :- 'testテーブル上の、キー値を持つ最初の組のみを取り出す'(R,_id1,_id2,_hoge). 'testテーブル上の、最初の組のみを取り出す'(_id2,_id1,_id2,_hoge) :- once(test(_id1,_id2,_hoge)). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #617 # MySQLを使っています、よろしくお願いします。 # たとえですがkaimonoというテーブルをつくり、名前・品物・値段という項目を作りました # # 名前 品物 値段 # 佐藤 味噌 500 # 田中 米  1000 # 鈴木 水  200 # # 佐藤の味噌の値段(500)を、値段の列にすべて適応させて500と変更するにはどうしたらよいでしょうか。 # 今回は500としたのですが、実際は数値が変動していていくらなのかわからない状態です # :- dynamic(買い物/3). 買い物(佐藤,味噌,500). 買い物(田中,米,1000). 買い物(鈴木,水,200). '佐藤の味噌の値段(500)を、値段の列にすべて適応させて500と変更するにはどうしたらよいでしょうか。今回は500としたのですが、実際は数値が変動していていくらなのかわからない状態です' :- 佐藤の味噌の値段を(_佐藤の味噌の値段), 値段の列にすべて適応させて変更する(_佐藤の味噌の値段). 佐藤の味噌の値段を(_佐藤の味噌の値段) :- 買い物(佐藤,味噌,_値段),!. 値段の列にすべて適応させて変更する(_佐藤の味噌の値段) :- forall(retract(買い物(_名前,_品物,_)),assertz(買い物(_名前,_品物,_佐藤の味噌の値段))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/602 # # SQL Server2008 以下のテーブル「値段」から # # id | 食品 | 値段合計 | 値段1 | 値段2 | 値段3 # ________________________ # # 1 | 肉 |  500  |  500 | # 1 | 魚 |  300  |     | 300 # 1 | 卵 |  200 | 100 | 50 | 50 # 2 | 肉 |  350 | 250 | 100 # 2 | 魚 |  400 | 150 | 250 # # # 以下の結果を得て、新しくテーブル「値段合計」を作りたいです。 # # # id |値段id合計|肉値段合計|肉値段1|肉値段2|肉値段3|魚値段合計|魚値段1|魚値段2|魚値段3|卵値段合計|卵値段1|卵値段2|卵値段3| # _________________________________________________________________________________________________________________________________ # 1 | 1000 | 500 | 500 | | | 300 | | 300 | | 200 | 100 | 50 | 50 | # 2 | 750 | 350 | 250 | 100 | | 400 | 150 | 250 # # # 肉、魚、卵はそれぞれのidに一行しかなく、 # 肉と魚は必ずありますが、卵はあるとは限りません。 # シンプル縦横問題はわかったのですが、複雑になると一挙にわからなくなりました。。 # ご教示お願い致します。 # '「値段合計」を作る' :- findsetof(id,値段(_id,_,_,_,_,_),_idならび), append(_,[_id|R],_idならび), 食品の値段を得る(_id,肉,_肉値段合計,_肉値段1,_肉値段2,_肉値段3), 食品の値段を得る(_id,魚,_魚値段合計,_魚値段1,_魚値段2,_魚値段3), 食品の値段を得る(_id,卵,_卵値段合計,_卵値段1,_卵値段2,_卵値段3), _値段id合計 is _肉値段合計 + _魚値段合計 + _卵値段合計, assertz(値段合計(_id,_値段id合計,_肉値段合計,_肉値段1,_肉値段2,_肉値段3,_魚値段合計,_魚値段1,_魚値段2,_魚値段3,_卵値段合計,_卵値段1,_卵値段2,_卵値段3)), R = []. 食品の値段を得る(_id,_食品,_値段合計,_値段1,_値段2,_値段3) :- 値段(_id,_食品,_値段合計,_値段1,_値段2,_値段3),!. 食品の値段を得る(_id,_食品,0,0,0,0). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/597 # # 下記のようなデータがあるとき、投票回数が3以上に該当する投票者の # レコードを全て除いた結果が欲しいのですがどのようにしたらよいでしょうか? # 595ですがすみません重要なカラムを省いていました。 # その投票者を省くのはそのアンケートNoだけに限定したいのです # # アンケートNo ,投票者 ,投票回数, 誰に投票したか # ------------------------------- # 1   , A   , 1   , D # 1   , B   , 1   , E # 1   , B   , 2   , F # 1   , B   , 3   , G # 1   , C   , 2   , H # 1   , C   , 2   , I # 2   , A   , 1   , D # 2   , B   , 1   , E # 2   , C   , 1   , H # 2   , C   , 2   , I # 2   , C   , 3   , J # # 欲しいデータ # 1   , A   , 1   , D # 1   , C   , 2   , H # 1   , C   , 2   , I # 2   , A   , 1   , D # 2   , B   , 1   , E # # '投票回数が3以上に該当する投票者のレコードを全て除いた結果'(_アンケートNo,_投票者,_投票回数,_誰に投票したか) :- findsetof([_アンケートNo,_投票者],( データ(_アンケートNo,_投票者,_投票回数,_誰に投票したか), _投票回数 >= 3), L), データ(_アンケートNo,_投票者,_投票回数,_誰に投票したか), \+(member([_アンケートNo,_投票者],L)). findsetof(A,B,L) :- findall(A,B,C), setof(A,member(A,C),L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/595 # # 下記のようなデータがあるとき、投票回数が3以上に該当する投票者の # レコードを全て除いた結果が欲しいのですがどのようにしたらよいでしょうか? # # 投票者 ,投票回数, 誰に投票したか # ------------------------------- # A   , 1   , D # B   , 1   , E # B   , 2   , F # B   , 3   , G # C   , 2   , H # C   , 2   , I # # (3以上に該当する投票者Bのレコードを除く) # A   , 1   , D # C   , 2   , H # C   , 2   , I # # '投票回数が3以上に該当する投票者のレコードを全て除いた結果'(_投票者,_投票回数,_誰に投票したか) :- findsetof(_投票者,( データ(_投票者,_投票回数,_誰に投票したか), _投票回数 >= 3), L), データ(_投票者,_投票回数,_誰に投票したか), \+(member(_投票者,L)). findsetof(A,B,L) :- findall(A,B,C), setof(A,member(A,C),L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/558 # # create table aaa ( # id integer not null, # test text not null, # test2 integer not null, # unique (id,test) # ); # # create table bbb ( # id integer not null, # test text not null, # test2 integer not null # unique (id,test) # ); # # aaa # id test test2 # 10 aaa 100 # 10 bbb 200 # 10 ccc 100 # 10 ddd 100 # # bbb # id test test2 # 10 aaa 200 # 10 bbb 100 # # ほしい結果 # id test test2 # 10 aaa 200 # 10 bbb 100 # 10 ccc 100 # 10 ddd 100 # aaa(10,111,200). aaa(10,bbb,100). bbb(10,aaa,200). bbb(10,bbb,100). bbb(10,ccc,100). bbb(10,ddd,100). ほしい結果(_id,_test,_test2) :- findall([_id,_test,_test2],( aaa(_id,_test,_test2)), LL1), findall([_id,_test,_test2],( bbb(_id,_test,_test2)), LL2), append(LL1,LL2,LL), findsetof([_id,_test],( append(_,[[_id,_test]|_],LL)), LL3), findmax([_test2,_id,_test],( append(_,[[_id,_test]|_],LL3), append(_,[[_id,_test,_test2]|_],LL)), LL4), append(_,[[_test2,_id,_test]|_],LL4). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/538 # # select *, tableid=1 from test # みたいに全てのカラムに加えてtableid=1を加えたものを取得したいのですが # どういうSQLかけばいいのでしょう? # *はidとnameが入ってるとしたらこんな感じのものを期待してます # # ++++++++++++++++++++ # + id + name + .tableid .+ # ++++++++++++++++++++ # + 1 .+ .加藤 +   1   + # ++++++++++++++++++++ # + 2 .+ .伊藤 +   1   + # ++++++++++++++++++++ # + 3 .+ .佐藤 +   1   + # ++++++++++++++++++++ # # 'select *, tableid=1 from test みたいに全てのカラムに加えてtableid=1を加えたものを取得する'(X) :- count(テーブル構造(_テーブル,_,_項目名),_項目数), length(L,_項目数), P =.. [_テーブル|L], call(P), append(L,['tableid=1'],X). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/535 # # 関連性がないけど取得したデータ型が同じ2つのSELECT文を結合させるにはどうしたらいいでしょうか? # # SELECT 1 # SELECT int_column AS A, timestamp_column AS B FROM table1 # # A     B # 10 2011-07-11 # # SELECT 2 # SELECT int_column AS A timestamp_column AS B FROM table2 # # A     B # 5  2011-07-10 # 10 2011-07-13 # # これをA-Bの順番にソートして # # A     B # 5  2011-07-10 # 10  2011-07-11 # 10  2011-07-13 # # こんな感じの1つのテーブルにしたいのですが、よろしくお願いします。 # # '関連性がないけど取得したデータ型が同じ2つのSELECT文を結合する'(X) :- findall([_table1_A,_table1_B],table1(_table1_A,_table1_B),LL1), findall([_table2_A,_table2_B],table2(_table2_A,_table2_B),LL2), append(LL1,LL2,LL3), sort(LL3,LL), append(_,[X|R],LL). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #520 # SQLiteを使っています。 # # 顧客A(顧客idは100)さんの最新の購入物を表示したいのですが、 # select 顧客.顧客名, 購入物.顧客名 from 顧客 natural join 購入物 where 顧客id=100 order by 購入日 desc limit 1; # # っていま書いていますが、無駄が多い気がします。 # これを手直していただきたいのですが、よろしくお願いします。 # # 顧客(100,'A'). 購入物(100,'ORACLE Ver3.0','19840331'). 購入物(100,'Prolog-KABA','19841201'). '顧客A(顧客idは100)さんの最新の購入物を表示する'(_id,_顧客名,_最新の購入物) :- 顧客(_id,_顧客名), setof([_購入日,_購入物],[_購入日,_購入物] ^ 購入物(_id,_購入物,_購入日),LL), last(LL,[_,_最新の購入物]). ?- '顧客A(顧客idは100)さんの最新の購入物を表示する'(100,_顧客名,_最新の購入物). _顧客名 = 'A', _最新の購入分 = 'Prolog-KABA'. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/505 # # ・DBMS名とバージョン # SQLite # # ・DBに入っているテーブルデータ # ID DATA # 1 aaa # 2 bbb # 3 ccc # 4 ddd # 5 ccc # # 手持ちのデータ # aaa、bbb、ddd # # ・欲しい結果 # テーブルデータと手持ちのデータを比較して、 # 手持ちのデータに存在しないデータを持つテーブルデータの行(ID3とID5)を削除したいのですが、 # どこのように書けばよいでしょうか # 'テーブルデータと手持ちのデータを比較して、手持ちのデータに存在しないデータを持つテーブルデータの行(ID3とID5)を削除する'(_手持ちのデータならび) :- テーブル(_ID,_DATA), \+(member(_DATA,_手持ちのデータならび)), retract(テーブル(_ID,_DATA)), fail. 'テーブルデータと手持ちのデータを比較して、手持ちのデータに存在しないデータを持つテーブルデータの行(ID3とID5)を削除する'(_). % 以下のサイトは # # 井の頭線に関する情報が以下に纏められている。この述語定義について、 # 批判せよ。 # :- op(300,xf,(m)). :- op(300,xf,(mm)). 井の頭線(渋谷,神泉,500 m). 井の頭線(神泉,駒場東大前,900 m). 井の頭線(駒場東大前,池ノ上,1000 m). 井の頭線(池ノ上,下北沢,600 m). 井の頭線(下北沢,新代田,500 m). 井の頭線(新代田,東松原,500 m). 井の頭線(東松原,明大前,900 m). 井の頭線(明大前,永福町,1100 m). 井の頭線(永福町,西永福,700 m). 井の頭線(西永福,浜田山,800 m). 井の頭線(浜田山,高井戸,1200 m). 井の頭線(高井戸,富士見ヶ丘,800 m). 井の頭線(富士見ヶ丘,久我山,700 m). 井の頭線(久我山,三鷹台,1000 m). 井の頭線(三鷹台,井の頭公園,900 m). 井の頭線(井の頭公園,吉祥寺,600 m). 急行停車駅(渋谷). 急行停車駅(下北沢). 急行停車駅(明大前). 急行停車駅(永福町). 急行停車駅(久我山). 急行停車駅(吉祥寺). 乗り換え駅(吉祥寺,[中央線]). 乗り換え駅(明大前,[京王線]). 乗り換え駅(下北沢,[小田急線]). 乗り換え駅(渋谷,[山手線,埼京線,東横線,銀座線,田園都市線,半蔵門線,副都心線]). 軌間(井の頭線,1067 mm). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % 一般論として、単位節データベースの引数として複合項(構造体)を % 持つべきではない。 % m,mmといった単位情報は別に述語定義するべきである。 % 乗り換え駅の定義も % 軌間単位(mm). 駅間距離単位(m). % % を追加して上で % 井の頭線(渋谷,神泉,500). 井の頭線(神泉,駒場東大前,900). 井の頭線(駒場東大前,池ノ上,1000). 井の頭線(池ノ上,下北沢,600). 井の頭線(下北沢,新代田,500). 井の頭線(新代田,東松原,500). 井の頭線(東松原,明大前,900). 井の頭線(明大前,永福町,1100). 井の頭線(永福町,西永福,700). 井の頭線(西永福,浜田山,800). 井の頭線(浜田山,高井戸,1200). 井の頭線(高井戸,富士見ヶ丘,800). 井の頭線(富士見ヶ丘,久我山,700). 井の頭線(久我山,三鷹台,1000). 井の頭線(三鷹台,井の頭公園,900). 井の頭線(井の頭公園,吉祥寺,600). 乗り換え駅(吉祥寺,中央線). 乗り換え駅(明大前,京王線). 乗り換え駅(下北沢,小田急線). 乗り換え駅(渋谷,山手線). 乗り換え駅(渋谷,埼京線). 乗り換え駅(渋谷,東横線). 乗り換え駅(渋谷,田園都市線). 乗り換え駅(渋谷,銀座線). 乗り換え駅(渋谷,半蔵門線). 乗り換え駅(渋谷,副都心線). % とした方がよい。 % % 急行停車駅/2,乗り換え駅/3には井の頭線である情報がない。 % これを付加するべきである。 乗り換え駅(井の頭線,吉祥寺,中央線). 乗り換え駅(井の頭線,明大前,京王線). 乗り換え駅(井の頭線,下北沢,小田急線). 乗り換え駅(井の頭線,渋谷,山手線). 乗り換え駅(井の頭線,渋谷,埼京線). 乗り換え駅(井の頭線,渋谷,東横線). 乗り換え駅(井の頭線,渋谷,田園都市線). 乗り換え駅(井の頭線,渋谷,銀座線). 乗り換え駅(井の頭線,渋谷,半蔵門線). 乗り換え駅(井の頭線,渋谷,副都心線). 急行停車駅(井の頭線,渋谷). 急行停車駅(井の頭線,下北沢). 急行停車駅(井の頭線,明大前). 急行停車駅(井の頭線,永福町). 急行停車駅(井の頭線,久我山). 急行停車駅(井の頭線,吉祥寺). % % とするか、 % 井の頭線乗り換え駅(吉祥寺,中央線). 井の頭線乗り換え駅(明大前,京王線). 井の頭線乗り換え駅(下北沢,小田急線). 井の頭線乗り換え駅(渋谷,山手線). 井の頭線乗り換え駅(渋谷,埼京線). 井の頭線乗り換え駅(渋谷,東横線). 井の頭線乗り換え駅(渋谷,田園都市線). 井の頭線乗り換え駅(渋谷,銀座線). 井の頭線乗り換え駅(渋谷,半蔵門線). 井の頭線乗り換え駅(渋谷,副都心線). 井の頭線急行停車駅(渋谷). 井の頭線急行停車駅(下北沢). 井の頭線急行停車駅(明大前). 井の頭線急行停車駅(永福町). 井の頭線急行停車駅(久我山). 井の頭線急行停車駅(吉祥寺). % % とするべきである。 % % 書きなおしたもの % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/409 # # 数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、 # ひとつのテーブルを得たいのだが、そんなことって1クエリだけでできる? # '数字の入ったテーブルどうし(行数は同じに揃えてある)の各行を掛け算して、ひとつのテーブルを得たい'(_テーブル1,_テーブル2,_テーブル3) :- テーブル述語(_テーブル1,P1), テーブル述語(_テーブル2,P2), findall(L1,P1,LL1), findall(L2,P2,LL2), ならび同士を掛けあわせる(LL1,LL2,LL3), 節を追加する(_テーブル3,LL3). テーブル述語(_テーブル,P) :- findall(_,( テーブル構造(_テーブル,_,_)), L), P =.. [_テーブル|L],!. ならび同士を掛けあわせる([],[],[]) :- !. ならび同士を掛けあわせる([L1|R1],[L2|R2],[L3|R3]) :- list(L1), list(L2), ならび同士を掛けあわせる(L1,L2,L3), ならび同士を掛けあわせる(R1,R2,R3),!. ならび同士を掛けあわせる([N1|R1],[N2|R2],[N3|R3]) :- number(N1), number(N2), N3 is N1 * N2, ならび同士を掛けあわせる(R1,R2,R3). 節を追加する(_テーブル,LL) :- append(_,[L|R],LL), P =.. [_テーブル|L], assertz(P), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/483 # # 全校学生健康診断表で # 身長の高い人50人を選ぶ場合 # select 学生ID, 学生名, 学生身長 from 健康診断表 order by 学生身長 desc limit 50 # とかでいいと思いますが # その次の50人を選ぶ場合はどうしたらいいのでしょうか? # # 身長の高い人50人づつ選ぶ場合 :- findall([_学生身長,_学生ID,_学生名],( 健康診断表(_学生ID,_学生名,_学生身長)), LL1), sort(LL1,LL2), reverse(LL2,LL3), 身長の高い人50人を選ぶ(LL3). 身長の高い人50人を選ぶ(LL) :- length(LL0,50), append(LL0,LL2,LL), append(_,[[_学生身長,_学生ID,_学生名]|R],LL0), writef('%t,%t,%t\n',[_学生ID,_学生名,_学生身長]), R = []. 身長の高い人50人を選ぶ(LL) :- length(LL0,50), append(LL0,LL2,LL), 身長の高い人50人を選ぶ(LL2). 身長の高い人50人を選ぶ(LL) :- append(_,[[_学生身長,_学生ID,_学生名]|R],LL), writef('%t,%t,%t\n',[_学生ID,_学生名,_学生身長]), R = []. 身長の高い人50人を選ぶ([]). % 以下のサイトは # 出典 :: SQL質疑応答スレ 11問目 #480 # ・DBMS名とバージョン # SQL一般 # # ・テーブルデータ # 回覧データ # # ・欲しい結果 # 職員のべ数が、ビット数を越えても耐えうる構造 # # ・説明 # 回覧データを職員が確認したかどうかを、回覧データ側へ記載しようと # int(64bit)型で、ビットをオンオフする方法を考えましたが # これでは、職員の延べ人数が64人を越える可能性に対応できません # # こういう情報は、一般的にどのように扱いますでしょうか? # - [職員ID] [回覧データID] の別テーブル? # - 文字列をビット代わりに利用? # 回覧資格(尾崎,'20期貸借対照表'). 回覧資格(尾崎,'20期損益計算書'). 回覧(尾崎,'20期損益計算書'). 職員の回覧登録(_職員,_回覧データ) :- asserta(回覧(_職員,_回覧データ)). 回覧確認(_職員,_回覧データ) :- 回覧(_職員,_回覧データ). 回覧一覧(_回覧データ) :- forall(回覧資格(_職員,_回覧データ), 回覧済を確認したら回覧していますと回覧していなかったらまだ回覧していませんと報告する(_職員,_回覧データ)). 回覧済を確認したら回覧していますと回覧していなかったらまだ回覧していませんと報告する(_職員,_回覧データ) :- 回覧済を確認したら回覧していますと報告する(_職員,_回覧データ). 回覧済を確認したら回覧していますと回覧していなかったらまだ回覧していませんと報告する(_職員,_回覧データ) :- 回覧していなかったらまだ回覧していませんと報告する(_職員,_回覧データ). 回覧済を確認したら回覧していますと報告する(_職員,_回覧データ) :- 回覧済を確認したら(_職員,_回覧データ), 回覧していますと報告する(_職員,_回覧データ). 回覧済を確認したら(_職員,_回覧データ) :- 回覧(_職員,_回覧データ). 回覧していますと報告する(_職員,_回覧データ) :- writef('職員 %20r は %t を回覧しています\n',[_職員,_回覧データ]). 回覧していなかったらまだ回覧していませんと報告する(_職員,_回覧データ) :- 回覧していなかったら(_職員,_回覧データ), まだ回覧していませんと報告する(_職員,_回覧データ). 回覧していなかったら(_職員,_回覧データ) :- \+(回覧(_職員,_回覧データ)). まだ回覧していませんと報告する(_職員,_回覧データ) :- writef('職員 %20r は %t をまだ回覧していません!\n',[_職員,_回覧データ]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/441 # # id # 1 # 2 # 3 # 5 # 9 # 10 # ... # # のようなテーブルがあって、id を "1-3,5,9-10" のように取り出すことはできますか? # GROUP_CONCAT で1つずつカンマで連結するこはできるのですが。 # 'id が1\\n3\\n5\\n9\\n10\\n ... のテーブルがあって、id を "1-3,5,9-10" のように取り出す'(L) :- findall(X,( '連続するidを纏めて文字列とする'(X)), L). '連続するidを纏めて文字列とする'(X) :- findall(_id,( テーブル(_id)), L), append(L1,L2,L3,L), 連続(L2), 二つのならびが不連続(L1,L2), 二つのならびが不連続(L2,L3), ならびの先頭と最後の要素を取り出す(L2,X). ならびの先頭と最後の要素を取り出す([S],S). ならびの先頭と最後の要素を取り出す(L,S-E) :- last(L,E), L = [S|_],!. 連続([A]). 連続([A,B|R]) :- B is A + 1, 連続([B|R]). 二つのならびが不連続(L1,L2) :- last(L1,A), L2 = [B|_], B is A + 1,!, fail. 二つのならびが不連続(L1,L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/437 # # [ユーザー] # id | name # --+------- # 1 | hage # 2 | fuge # … # … # # [タグ] # user_id | name # --+-------+----- # 1 | 1    | A # 2 | 1    | F # 3 | 1    | G # 4 | 2    | A # 5 | 2    | H # … # … # # というテーブルから、 # [ #   [ #     1, #     hage, #     [ #       A, #       F, #       G, #     ], #   ], #   [ #     2, #     fuge, #     [ #       A, #       H, #     ], #   ], # ] # # こんな形で、多次元配列な結果を得たいんですが、 # ループでユーザーテーブルのレコード数だけSQL発行するしかないんでしょうか? # レコード数に比例して時間がかかってよくないので、速く処理する方法はないでしょうか? # # # 二つのテーブルの結合を構造で表現する(_求める構造) :- findall([_id,_name,L1],( ユーザー(_id,_name), findall(_name2,( タグ(_,_id,_name2)), L1)), _求める構造). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/429 # # ・DB2 v9.5 # ・テーブルの内容 # ■テーブル成績 # 名前,教科コード,点数 # ========== # Aさん,1,50 # Aさん,2,70 # Bさん,3,80 # # ■テーブル教科 # 教科コード,教科名 # ========== # 1,数学 # 2,国語 # 3,社会 # # ・欲しい結果 # Aさん,数学,50 # Aさん,国語,70 # Aさん,社会,0 # Bさん,数学,0 # Bさん,国語,0 # Bさん,社会,80 # # ・説明 # どう結合したら目的の結果が得られるかわかりません。 # おしえてくださいますでしょうか。 # 成績('Aさん','1',50). 成績('Aさん','2',70). 成績('Bさん','3',80). 教科('1',数学). 教科('2',国語). 教科('3',社会). 成績の表示 :- '成績と教科の結合。ただし、成績がない教科の点数は0とする'(_教科成績ならび), append(_,[[[_名前,_教科名,_点数]|R],_教科成績ならび), writef('%t,%t,%t\n',[_名前,_教科名,_点数]), R = []. '成績と教科の結合。ただし、成績がない教科の点数は0とする'(_教科成績ならび) :- findsetof(_名前,成績(_名前,_,_),_名前ならび), findall([_名前,_教科名,_点数],( append(_,[_名前|R],_名前ならび), 教科(_教科コード,_教科名), 科目成績を得る(_名前,_教科コード,_点数)), _教科成績ならび). 科目成績を得る(_名前,_教科コード,_点数) :- テーブル成績(_名前,_教科コード,_点数),!. 科目成績を得る(_,_,0). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1269585561/919 # # ../test/read.cgi/db/1269585561/915-916、918 # 私はMySQLを想定しているので、MySQLを使用したOSSを参考にしています。 # (例えば、EC CUBEとかOpenPNE) # # それで、現状は以下のようなテーブル構成です。 # (主な部分のみ記載します) # # ■管理者用 # ID、アカウント名、パスワード、メールアドレス、権限 # ■一般会員用 # ID、メールアドレス、パスワード、ニックネーム、年齢、性別...etc # ■ビジネス会員用 # ID、メールアドレス、パスワード、会社名・担当者名...etc # # 管理IDはアカウント名+パスワードでログインさせ、 # 一般・ビジネスはメールアドレス+パスワードでログインさせるパターンです。 # # 共通項を考えるなら # # ■ユーザ # ID、アカウント名、パスワード、権限 # ■一般会員 # ユーザID、ニックネーム、年齢、性別...etc # # みたいな形になるかと思いますが、上記の通り、 # 会員によってログイン方法を変えたいので、 # 共通部分もダブって1テーブルに記載しています。 # 管理者用の検索(_ID,_アカウント名,_パスワード,_アドレス,_権限) :- 'ID'(_ID,管理者用) アカウント名(_ID,_アカウント名), パスワード(_ID,_パスワード), メール(_ID,_アドレス), 権限(_ID,_権限). 一般会員用の検索(_ID,_メールアドレス,_パスワード,_ニックネーム,_年齢,_性別) :- 'ID'(_ID,一般会員用), メールアドレス(_ID,_メールアドレス), パスワード(_ID,_パスワード), ニックネーム(_ID,_ニックネーム), 年齢(_ID,_年齢), 性別(_ID,_性別). ビジネス会員用の検索(_ID,_メールアドレス,_パスワード,_会社名_担当者名) :- 'ID'(_ID,ビジネス会員用), メールアドレス(_ID,_メールアドレス), パスワード(_ID,_パスワード), '会社名・担当者名'(_ID,_会社名_担当者名). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/424 # # MySQLです。 # テーブル: # User # | Id | Nickname | Name | Sirname | Mailaddress # +----+----------+-----------+---------+---------------+ # | 1 | Binchou | Binchoutan |NULL | foobar| # | 2 |brablabra-- # | 3 |Mokutan | Mokutan |NULL|foobar| # # Response # # | Id | IssueId | UserId | MentionId | TStamp | Body | AlterBody | IPAddress | HostName | Deleted | UA | # +----+---------+--------+-----------+---------------------+------------------+-----------+-----------+-----------+---------+------+ # | 1 | 2 | 1 | 3 | 2011-06-21 23:12:01 | First TEST HERE! | Altered | localhost | Localhost | 0 | SQL | # # これらから、Response.Id,Issue.Id,User.Nickname(from Response.UserId),User.Nickname(from Response.MentionId) # を得ようと思っています(つまりId->Nicknameの辞書解決)が、二つ以上のレコードを同じテーブルから結合する方法がわかりません。 # 別名をつけるとネットに書いてあったのですがいまいち書き方が分かりません。 # 御教授ください。 二つ以上のレコードを同じテーブルから結合する(_UserId,_MentionId,_Id_1,_IssueId,_Nickname_2) :- 'user'(_Id_1,_Nickname_1,_,_,_), 'Response'(_Id_1,_IssueId,_UserId,_,_,_,_,_,_,_,_), 'user'(_Id_2,_Nickname_2,_,_,_), 'Response'(_Id_2,_,_,_MentionId,_,_,_,_,_,_,_). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/411 # # MySQL 5.1.46 # #   ≪item≫ # ───────── # id  name  category # ───────── # 1  Name1   2 # 2  Name2   1 # 3  Name3   1 # 4  Name4   6 # 5  Name5   4 # 6  Name6   8 # 7  Name7   2 # 8  Name8   2 # ───────── # # item 内のデータについて、 category が 2 のものだけ category の値を 7 に振り替えたいと思い # # UPDATE item SET category = 7 WHERE category = 2 # # を発行したのですが、うまく動作しません。 # こういう場合にうまくいく方法を教えてください。 # # 'item 内のデータについて、 category が 2 のものだけ category の値を 7 に振り替えたいと思い' :- 節順序を変更するupdate(item/3,[[3,2]],[[3,7]]). 節順序を変更するupdate(_述語名/_アリティ,_鍵情報ならび,_更新情報ならび,L) :- 節順序を変更するupdate(先頭,_述語名/_アリティ,_鍵情報ならび,_更新情報ならび,L),!. 節順序を変更するupdate(先頭,_述語名/_アリティ,_鍵情報ならび,_更新情報ならび) :- length(L1,_アリティ), 鍵情報を設定する(_鍵情報ならび,L1), _述語 =.. [_述語名|L1], findall(L2,( retract(_述語), 更新情報を設定する(_更新情報ならび,L1,L2)), L), 更新ならびを先頭に付加する(_述語名,L),!. 節順序を変更するupdate(末尾,_述語名/_アリティ,_鍵情報ならび,_更新情報ならび) :- length(L1,_アリティ), 鍵情報を設定する(_鍵情報ならび,L1), _述語 =.. [_述語名|L1], findall(L2,( retract(_述語), 更新情報を設定する(_更新情報ならび,L1,L2)), L), 更新ならびを末尾に付加する(_述語名,L),!. 更新ならびを先頭に付加する(_述語名,L) :- append(_,[L3|R],L), _述語3 =.. [_述語名|L3], asserta(_述語3), R = []. 更新ならびを末尾に付加する(_述語名,L) :- append(_,[L3|R],L), _述語3 =.. [_述語名|L3], assertz(_述語3), R = []. 鍵情報を設定する([],L). 鍵情報を設定する([[_鍵位置,_鍵]|R],L) :- nth1(_鍵位置,L,_鍵), 鍵情報を設定する(R,L). 更新情報を設定する([],L,L). 更新情報を設定する([[_更新位置,_更新値]|R1],L1,L) :- append(L0,[_|R],L1), length([_|L0],_更新位置), append(L0,[_更新値|R],L2), 更新情報を設定する(R1,L2,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/402 # # 下記のようなユーザーに対する取得ポイントと、消費したポイントのテーブルがあり、 # それらの合計を各ユーザー毎にまとめたいのですが、どうしたらいいでしょうか? # # [取得テーブル t1] # id | user_id | point # --+-------+----- # 1 | 1    | 30 # 2 | 2    | 10 # 3 | 3    | 50 # 4 | 1    | 20 # 5 | 2    | 10 # 6 | 3    | 50 # # [消費テーブル t2] # id | user_id | used_point # --+-------+----- # 1 | 1    | -10 # 2 | 2    | -10 # 3 | 4    | -50 # 4 | 1    | -20 # 5 | 4    | -10 # # <欲しい結果> # user_id | point # -------+----- # 1    | 20 # 2    | 10 # 3    | 100 # 4    | -60 # # # DBMSはMySQLです。 # お願いしますm(_ _)m # # t1(1,1,30). t1(2,2,10). t1(3,3,50). t1(4,1,20). t1(5,2,10). t1(6,3,50). t2(1,1,-10). t2(2,2,-10). t2(3,4,-50). t2(4,1,-20). t2(5,4,-10). '下記のようなユーザーに対する取得ポイントと、消費したポイントのテーブルがあり、それらの合計を各ユーザー毎にまとめたい'(_ユーザごとの合計) :- ユーザを取得(L), findall([_user_id,_合計],( append(_,[_user_id|_],L), t1テーブルの合計(_user_id,_合計1), t2テーブルの合計(_user_id,_合計2), _合計 is _合計1 - _合計2), _ユーザごとの合計). ユーザを取得(L) :- findsetof(_user_,t1(_user_id,_),L1), findsetof(_user_,t2(_user_id,_),L2), 和集合(L1,L2,L). t1テーブルの合計(_user_id,_合計) :- findsum(_point,t1(_user_id,_point),_合計). t2テーブルの合計(_user_id,_合計) :- findsum(_userpoint,t2(_user_id,_userpoint),_合計). 和集合(_集合1,_集合2,_和集合) :- append(_集合1,_集合2,_ならび3), findall(_要素,( append(L0,[_要素|_],_ならび3), \+(append(_,[_要素|_],L0))), _和集合) . % 参照 % findsum/3 http://nojiriko.asia/prolog/findsum.html % findsetof/3 http://nojiriko.asia/prolog/findsetof.html % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/390 # # Mysql 5.1.49です。 # Datatank.Datas # Id,Owner,Data,Flag # ------------------ # 1,3,'foobar',TRUE # 2,3,'hoge',FALSE # 3,2,'moko',TRUE # # Datatank.Owners # Id,Name,Mail # -------------------- # 1,'Negi','negi@negi.com' # 2,'Yod','gimel@example.com' # 3,'vav','vvvv@mokkosu.jp' # # のようなテーブル二種を想定します。 # DatasテーブルのFlagが真の場合(ex.Id=1)、 # そのレコードのOwner(3)をOwnerテーブルから検索してMail(vvvv@...)をリストするにはどうしたら良いでしょうか。 # 'Datatank.Datas'(1,3,'foobar','TRUE'). 'Datatank.Datas'(2,3,'hoge','FALSE'). 'Datatank.Datas'(3,2,'moko','TRUE'). 'Datatank.Owners'(1,'Negi','negi@negi.com'). 'Datatank.Owners'(2,'Yod','gimel@example.com'). 'Datatank.Owners'(3,'vav','vvvv@mokkosu.jp'). 'DatasテーブルのFlagが真の場合(ex.Id=1)、そのレコードのOwner(3)をOwnerテーブルから検索してMail(vvvv@...)をリストするにはどうしたら良いでしょうか'(_メール付きならび) :- findall([_ID,_owner,_Name,_Data,_Mail],( 'Datatank.Datas'(_Id,_Owner,_Data,'TRUE'), 'Datatank.Owners'(_Id,_Name,_Mail)), _メール付きならび). % 以下のサイトは # テーブル: # no comment id(テーブル名:テーブル) # 1 aaaaa 春 # 2 bbbbb 夏 # 3 ccccc 春 # 4 ddddd 春 # : # # 欲しい結果: # no comment id count(*) # 3 ccccc 春 2 # # # idが春のものの数を集計したく、 # select *,count(*) from baka group by id where id = '春'; # でそれは可能なんですが、selectで取れる他の結果(commentとか)は、noが3のものを表示したいんです # % 別々に計算するつもりで、定義する。 テーブル(1,aaaaa,春). テーブル(2,bbbbb,夏). テーブル(3,ccccc,春). テーブル(4,ddddd,春). 節を取得時に集約値を併記する(_no,_comment,_id,_度数) :- テーブル(_no,_comment,_id), count(テーブル(_,_,_id)),_度数). count(P,C) :- findall(1,P,L), length(L,C). ?- 節を取得時に集約値を併記する(_no,_comment,春,_度数). _no = 1, _comment = aaaaa, _度数 = 3; _no = 3, _comment = ccccc, _度数 = 3; _no = 4, _comment = ddddd, _度数 = 3; false. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/324 # # NAME FRUIT NUM # # TARO banana 10 # TARO orange 4 # TARO tomato 3 # TARO grape 2 # TARO apple 1 # TARO melon 1 # TARO mango 1 # HANAKO tomato 30 # HANAKO orange 21 # HANAKO apple 2 # HANAKO banana 1 # GEN mango 12 # GEN grape 6 # GEN orange 4 # GEN banana 1 # GEN apple 1 # # # というテーブルで、各人間の持つ果物のうち上位3種類を取得したいのですが、 # どうすればよろしいでしょうか? # # 欲しい結果 # NAME FRUIT NUM # # TARO banana 10 # TARO orange 4 # TARO tomato 3 # HANAKO tomato 30 # HANAKO orange 21 # HANAKO apple 2 # GEN mango 12 # GEN grape 6 # GEN orange 4 # # # SQLserver2008です。よろしくお願いいたします。 # # テーブルで、各人間の持つ果物のうち上位3種類を取得したい :- findsetof(_名前,テーブル(_名前,_果物,_数量),LL1), append(_,[_名前|R],LL1), findall([_名前,_数量,_果物],( テーブル(_名前,_果物,_数量)), LL2), 大きい順に(LL2,LL3), 上位3位(LL3,[_名前,_果物,_数量]), writef('%t %t %t\n',[_名前,_果物,_数量]), R = []. 大きい順に(L1,L2) :- sort(L1,L3), reverse(L3,L2),!. 上位3位(L,[_名前,_果物,_数量]) :- append(L0,[[_名前,_数量,_果物]|_],L), length(L0,Length), Length =< 2. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/300 # # 上手くいかないので質問させてください。 # ACCESS2007を使っています。 # 年フィールドと月フィールドを用いて「年度」の件数を抽出したいのですが、 # 以下のクエリでは月部分が干渉してか上手く抽出出来ません。 # # 22年4月〜23年3月 といった結果を出したいのですがどうしたらよいでしょうか? # # SELECT 年 FROM Table1 # WHERE (年>21 AND 月>3) AND (年<23 AND 月<4) # # '年フィールドと月フィールドを用いて「年度」の件数を抽出したい'(_テーブル,L) :- テーブル構造(_テーブル,年,M), テーブル構造(_テーブル,月,N), findmax(U,テーブル構造(_テーブル,_,U),Max), length(L1,Max), nth1(M,L1,_年), nth1(N,L1,_月), P =.. [_テーブル|L1], findall(_年度,( P, 年度のルール(_年,_月,_年度)), _年度ならび), findsetof(_年度,( append(_,[_年度|_],_年度ならび), L2), findall([_年度,_度数],( append(_,[_年度|_],L2), count(append(_,[_年度|_],_年度ならび),_度数)), L). 年度のルール(_年,_月,_年度) :- _月 >= 4, _年 = _年度,!. 年度のルール(_年,_月,_年度) :- _月 < 4, _年度 is _年 - 1,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/288 # # sqlite v3.6.23.1で、 # comment (text) ,postedtime (int) という形式にて掲示板を作っているのですが、 # 「最新の5コメント、但し、24時間以内の投稿については最大50個まで」を求めたくて # # SELECT comment FROM mm ORDER BY postedtime DESC LIMIT 50 # UNION # SELECT comment FROM mm WHERE postedtime > $nowtime - 3600*24 ORDER BY ptime DESC LIMIT 50 # # としてみたのですが($nowtimeには今の時間を入れてます)、 # 1st ORDER BY term does not match in the result set というエラーが出ます。 # (union前後のクエリそれぞれ単独ではエラーは出ません) # # 欲しい結果を求めるにはどのように書けばいいのでしょうか? # # '最新の5コメント、但し、24時間以内の投稿については最大50個まで'(_テーブル,_現在の時刻,P) :- split(_現在の時刻,[' ','/','-',':','.'],[_年,_月,_日,_時,_分,_秒,_]), テーブル構造(_テーブル,時刻,N), findmax(M,テーブル構造(_テーブル,_,M),Max), length(L1,Max), nth1(N,L1,_時刻), P =.. [_テーブル|L1], 選択(P,_年,_月,_日,_時,_分,_秒,L), append(_,[_時刻|_],L), call(P). 選択(P,_年,_月,_日,_時,_分,_秒,L) :- findsetof(_時刻,( call(P), 時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻)), L1), 要素切り取り(L1,L),!. 選択(P,_年,_月,_日,_時,_分,_秒,L) :- findall(_時刻,( call(P), 時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻)), L1), 整列(L1,L2), 要素切り取り(L2,L),!. 選択(P,_,_,_,_,_,_,L) :- findall(_時刻,( call(P)), L1), 整列(L1,L2), length(L,5), append(_,L,L2),!. 要素切り取り(L1,L) :- length(L1,Length), Length >= 50, length(L,50), append(_,L,L1),!. 要素切り取り(L1,L1) :- length(L1,Length), Length >= 5, length < 50,!. 時刻が24時間以内(_年,12,31,_時,_分,_秒,_時刻) :- split(_時刻,['/','-',':','.'],[_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]), _年_1 is _年 + 1, [_年_1,1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. 時刻が24時間以内(_年,2,29,_時,_分,_秒,_時刻) :- うるう年(_年), [_年,3,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. 時刻が24時間以内(_年,2,28,_時,_分,_秒,_時刻) :- \+(うるう年(_年)), [_年,3,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. 時刻が24時間以内(_年,_月,30,_時,_分,_秒,_時刻) :- append(_,[_月|_],[4,6,9,11]), _月_1 is _月 + 1, [_年,_月_1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. 時刻が24時間以内(_年,_月,31,_時,_分,_秒,_時刻) :- append(_,[_月|_],[1,3,5,7,8,10]), _月_1 is _月 + 1, [_年,_月_1,1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. 時刻が24時間以内(_年,_月,_日,_時,_分,_秒,_時刻) :- split(_時刻,['/','-',':','.'],[_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]), _日_1 is _日 + 1, [_年,_月,_日_1,_時,_分,_秒,_時刻] @>= [_年_2,_月_2,_日_2,_時_2,_分_2,_秒_2,_]),!. うるう年(_年文字列) :- atom(_年文字列), atom_to_term(_年文字列,_年整数,_), !, うるう年(_年整数) . うるう年(_年) :- 0 is _年 mod 400,!. うるう年(_年) :- 0 is _年 mod 100, !, fail. うるう年(_年) :- 0 is _年 mod 4,!. うるう年(_年) :- \+(0 is _年 mod 4), fail. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/286 # # sql初心者で申し訳ありません。2つの要素でソートをしたい場合どのようにすればよいでしょうか? # point01(int)、point02(int)があります。point01でソートを行い、point01が同じ場合point02でさらにソートをしなければいけません。 # # '2つの要素でソートをしたい場合どのようにすればよいでしょうか?'(_テーブル,P) :- テーブル構造(_テーブル,point01,N1), テーブル構造(_テーブル,point02,N2), count(テーブル構造(_,_,_),Count), length(L,Count), nth1(N1,L,Point01), nth1(N2,L,Point02), P =.. [_テーブル|L], setof([Point01,Point02],P,L2), append(_,[[Point01,Point02]|R],L2), call(P). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/256 # # カラムA, B, Cがあり、次のような順序で抽出したいと考えています。 # # A  B  C # ○ ○ ○ # ○ ○ × # ○ × × # × ○ × # × × ○ # # どのようにORDER BYを設定すればよいか、よろしければ教えて頂きたいと思います。 # よろしくおねがいしますm(__)m # # 'カラムA, B, Cがあり、次のような順序で抽出したいと考えています。 \\nA  B  C\\n ○ ○ ○ \\n○ ○ × \\n○ × × \\n× ○ × \\n× × ○ \\n'(L) :- setof([_A,_B,_C],テーブル(_A,_B,_C),L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1294641578/215 # # one_side the_other value # 30 31 23 # 31 30 23 # 4 31 20 # 31 6 20 # 6 31 20 # 31 4 20 # 19 30 19 # 30 19 19 # 7 27 17 # 35 18 17 # : : : # # one_sideとthe_otherのペアとして認識して # 逆順になっているだけのペアは纏める方法を教えて下さい # 'one_sideとthe_otherのペアとして認識して逆順になっているだけのペアは纏める方法を教えて下さい'(_テーブル名,_逆順になっているペア) :- findall([_one_side,_the_other],( 'one_sideとthe_otherのペアとして認識して逆順になっているだけのペアは纏める方法を教えて下さい'(_テーブル名,_one_side,_the_other,L2)), _逆順になっているペア). 'one_sideとthe_otherのペアとして認識して逆順になっているだけのペアは纏める方法を教えて下さい'(_テーブル名,_one_side,_the_other,L2) :- P =.. [_テーブル名,_one_side,_the_other,_value], findsetof([_one_side,_the_other],( call(P)), L1), append(_,[[_one_side,_the_other]|_],L1), findall(_value,( call(P)), L2), ニ要素以上の逆順ならび(L2). ニ要素以上の逆順ならび([A,B]) :- A @> B,!. ニ要素以上の逆順ならび([A,B|R1]) :- A @> B, ニ要素以上の逆順ならび([B|R]). % 以下のサイトは # Hello, I'm trying to make a prolog function (I know it's not a function # but I can't recall it's name) that given a list and a number N # returns a list with the elements that repeat at least N times. # # xpto(['a', 'a', 'a', 'b', 'b', 'c'], Out, 3) should return Out = ['a'] # # xpto(['a', 'a', 'a', 'b', 'b', 'c'], Out, 2) should return Out = ['a', 'b'] # # etc. # # I currently have: # # xpto([], _, _). # # xpto([H | L], O, Num) :- # count(H, [H | L], N), # N = Num, # xpto(L, [H | O], Num). # # xpto([H | L], O, Num) :- # count(H, [H | L], N), # N \= Num, # xpto(L, O, Num). # where in count(A, L, N) N is the number of times A repeats in L, however it doesn't work. I'm pretty sure my algorithm works on paper. # # Any help is appreciated :) xpro(L,Out,N) :- setof(M,member(M,L),L1), findall(A,( member(A,L1), count(member(A,L),Count), Count >= N), Out). % 以下のサイトは # いま、ls = [1, 2, 3, 4, 5]だとするだろ。 # そうすると。ls.remove(max(ls))ってのはアリなんだよな。この場合、ls = [1, 2, 3, 4, 5]ってのが返される。 # あ、違うか。ls = [1, 2, 3, 4]だね。ごめん。 # そこからまたmax適用して・・・ってのがSQLじゃあ思いつかないんだよな。どうすんべえ # 'SQLじゃなくて悪いがPrologで書いてみるべぇ'(Ls,L) :- max_remove(Ls,L). max_remove(L1,L) :- findall(L2,( max_remove(L1,L2)), L). max_remove(L1,L2) :- max(L1,A), remove(A,L1,L2). max_remove(L1,L2) :- max(L1,A), remove(A,L1,L3), max_remove(L3,L2). remove(_,[],[]). remove(A,[A|R1],R2) :- remove(A,R1,R2). remove(A,[B|R1],[B|R2]) :- \+(A==B), remove(A,R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/140 # # SELECT 料理表.料理名 FROM 料理表, 分量表, 商品表 #   WHERE 料理表.料理ID = 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID #            AND 商品表.商品名 = 'じゃがいも' # # これってどういう意味ですか? # 料理表.料理ID の後に二つ # 分量表.料理ID AND 分量表.商品ID = 商品表.商品ID #            AND 商品表.商品名 = 'じゃがいも' # があるのですが、教えてくださいお願いします。 # # '商品表にじゃがいもがあるとして話だけど、分量表にも情報があって、料理表に載ってるじゃがいもを使う料理はなんだろう'(_料理) :- 商品表(_ID,じゃがいも), 分量表(_ID,_分量), 料理表(_ID,_料理),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/137 # # お世話になっています。 # # どのようなSQLになるか教えてください。 # # テーブルA テーブルB テーブルC # E111,001,AR E111,001,AR E111,001,AR # E111,001,AY E111,001,AY E111,001,AY # E111,002,AR E111,003,AR E111,004,AR # # 上記のような同じキー項目(ID,番号,コード)を持つ3つのテーブルがあるとき、 # # E111,001,AR,E111,001,AR,E111,001,AR # E111,001,AY,E111,001,AY,E111,001,AY # E111,002,AR,'','','','','','' # '','','',E111,003,AR,'','','' # '','','','','','',E111,004,AR # # の形でレコードを取得するにはどのようなSQLになりますか? # # お願いします。 # # # '上記のような同じキー項目(ID,番号,コード)を持つ3つのテーブルがあるとき、3レコードを併記する'(L) :- findsetof([A,B],テーブルA(A,B,_),L1), findsetof([A,B],テーブルB(A,B,_),L2), findsetof([A,B],テーブルC(A,B,_),L3), append(L1,L2,L3,L4), findsetof([A,B],append(_,[[A,B]|_],L4),L5), findall([A1,B1,X,A2,B2,Y,A3,B3,Z],( append(_,[[A,B]|_],L5), '3レコード選択'(A,B,A1,B1,X,A2,B2,Y,A3,B3,Z), \+((X='',Y='',Z=''))),L). '3レコード選択'(A,B,A1,B1,X,A2,B2,Y,A3,B3,Z) :- 選択A(A,B,A1,B1,X), 選択B(A,B,A2,B2,Y), 選択C(A,C,A3,B3,Z). 選択A(A,B,'','','') :- \+(テーブルA(A,B,X)),!. 選択A(A,B,A,B,X) :- テーブルA(A,B,X). 選択B(A,B,'','','') :- \+(テーブルB(A,B,X)),!. 選択B(A,B,A,B,X) :- テーブルB(A,B,X). 選択C(A,B,'','','') :- \+(テーブルC(A,B,X)),!. 選択C(A,B,A,B,X) :- テーブルC(A,B,X). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/119 # # SQL初心者で申し訳ありませんが、以下のテーブルでid1を元に、val1とval2のデータを取得したいのですが # どのようにselectをすればよいでしょうか? # # # ・tabel1 # int id1 # int id2 # text val1 # # ・table2 # int id2 # text val2 # # 'id1を元に、val1とval2のデータを取得したいのですが'(_id1,_id2,_val1,_val2) :- table1(_id1,_id2,_val1), table2(_id2,_val2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/106 # # ストアドプロシージャについて質問させてください。 # # 簡単な結果を返すクエリ # SELECT A,B,C FROM TEST # # といったクエリの結果を戻り値として返すストアドを作成したいのですが # どのように書けば良いのかわかりません。 # # 単一の列のみを返す方法ならわかったのですが、複数列を返す方法が # 分からないといった状態です。 # テーブル構造('TEST',1,'A'). テーブル構造('TEST',2,'B'). テーブル構造('TEST',3,'C'). 簡単な結果を返すクエリ(_テーブル名,_選択項ならび,_値ならび) :- count(テーブル構造('TEST',_,_),Len), length(_値ならび,Len), findsetof(_,( テーブル構造(_テーブル名,Nth,_)), L), P =.. [_テーブル|_変数ならび], call(P), 選択項と値の結合(L,_選択項ならび,_値ならび). 選択項と値の結合(_テーブル名,L,[],[]) :- !. 選択項と値の結合(_テーブル名,L,[_選択項|R1],[_値|R2]) :- テーブル構造(_テーブル名,Nth,_選択項), list_nth(Nth,L,_値), 選択項と値の結合(_テーブル名,L,R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/106 # # ストアドプロシージャについて質問させてください。 # # 簡単な結果を返すクエリ # SELECT A,B,C FROM TEST # # といったクエリの結果を戻り値として返すストアドを作成したいのですが # どのように書けば良いのかわかりません。 # # 単一の列のみを返す方法ならわかったのですが、複数列を返す方法が # 分からないといった状態です。 # 簡単な結果を返すクエリ(_A,_B,_C) :- 'TEST'(_A,_B,_C). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/97 # # select * from table1 where col1 in (select colx, coly from table2); # # 的な書き方は無い? # ↓ってするしかない? # # select * from table1 where col1 in (select colx from table2) or col1 in (select coly from table2) ; # # 'select * from table1 where col1 in (select colx from table2) or col1 in (select coly from table2)'(L1) :- テーブルの選択(table1,[col1],[_col1],L1,P1), テーブルの選択(table2,[colx,coly],[_colx,_coly],L2,P2), P1, P2, 選択条件(_col1,_colx,_coly). 選択条件(X,X,_) :- !. 選択条件(X,_,X) :- !. %%% テーブルが生成される時に定義される %%% テーブル構造(table1,1,col1). テーブル構造(table2,1,colx). テーブル構造(table2,2,coly). %%% 汎用述語 %%% テーブルの選択(_テーブル名,_鍵名ならび,_鍵変数ならび,L,P) :- findall(_,テーブル構造(_テーブル名,_,_),L), P =.. [_テーブル名|L], 鍵変数の指定(_テーブル名,L,_鍵名ならび,_鍵変数ならび). 鍵変数の指定(_テーブル名,L,[],[]) :- !. 鍵変数の指定(_テーブル名,L,[_鍵名|R1],[_鍵変数|R2]) :- テーブル構造(_テーブル名,_位置,_鍵名), list_nth(_位置,L,_鍵変数), 鍵変数の指定(_テーブル名,R1,R2,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/92 # # 環境はoracle9iです。 # # ■テーブルの構成 # |年度|月|部署コード|商品コード|金額| # # ■テーブルの内容 # |2010|01|AAA|001|1000| # |2010|02|AAA|001|2000| # |2010|01|AAA|001|3000| # |2010|01|AAA|002|3000| # |2010|02|BBB|003|4000| # |2010|01|CCC|001|5000| # |2010|03|CCC|001|6000| # # 上記のようなテーブルがあり、 # これを # と、ここまでなら上の4つでGROUP BYしてあげれば良いのですが、 # そこに年度,部署コード,商品コードでサマリした # 「累計金額」列を加える必要があります。(イメージは下記のとおりです。) # # # ■抽出結果の構成 # |年度|月|部署コード|商品コード|金額|累計金額| # # ■抽出結果の内容 # |2010|01|AAA|001|4000|6000| # |2010|02|AAA|001|2000|6000| # |2010|02|BBB|003|4000|4000| # |2010|01|CCC|001|5000|11000| # |2010|03|CCC|001|6000|11000| # # # GROUP BYと別の集計単位で列を作ることが可能か、 # 可能であればどのようなSQLを書くべきか、 # というところを教えてください。 # # '|年度|月|部署コード|商品コード|金額| テーブルを年度,月,部署コード,商品コードでサマリした値にさらに年度,部署コード,商品コードでサマリした値を付加した行表示' :- 鍵ならびの生成([_年度,_部署コード,_商品コード],テーブル(_年度,_月,_部署コード,_商品コード,_金額),_鍵ならびの一), 鍵ならびの生成([_年度,_月,_部署コード,_商品コード],テーブル(_年度,_月,_部署コード,_商品コード,_金額),_鍵ならびの二), append(_,[[_年度,_部署コード,_商品コード]|R],_鍵ならびの一), 金額制約(_鍵ならびの二,_年度,_月,_部署コード,_商品コード,_金額月合計,_金額総合計), writef('|%t|%t|%t|%t|%t|%t\n',[_年度,_月,_部署コード,_商品コード,_金額月合計,_金額総合計]), R = []. 金額集約(L2,_年度,_月,_部署コード,_商品コード,_金額月合計,_金額総合計) :- 年度・部署コード・商品コード集約(_年度,_部署コード,_商品コード,_金額総合計), append(_,[[_年度,_月,_部署コード,_商品コード]|_],L2), 年度・月・部署コード・商品コード集約(_年度,_月,_部署コード,_商品コード,_金額月合計). 年度・月・部署コード・商品コード集約(_年度,_月,_部署コード,_商品コード,_金額合計) :- findsum(_金額,( テーブル(_年度,_月,_部署コード,_商品コード,_金額)), _年度・月・部署コード・商品コード集約). 年度・部署コード・商品コード集約(_年度,_部署コード,_商品コード,_金額合計) :- findsum(_金額,( テーブル(_年度,_月,_部署コード,_商品コード,_金額)), _年度・部署コード・商品コード集約). 鍵ならびの生成(_鍵変数ならび,_述語,_鍵ならび) :- findsetof(_鍵変数ならび,_述語,_鍵ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/76 # # 副問い合わせ?を一回ですませたい # OracleですがMySQLでもいいです # # SELECT * FROM hoge # WHERE fuga < (SELECT fuga+5 FROM hoge WHERE id=1 ) # AND fuga > (SELECT fuga+10 FROM hoge WHERE id=1 ) # # ↑をBETWEENにすると # # SELECT * FROM hoge # WHERE fuga BETWEEN ( # SELECT fuga+5 FROM hoge WHERE id=1 # ) and ( # SELECT fuga+10 FROM hoge WHERE id=1 # ) # # となると思うのですが、これを # # SELECT * FROM hoge # WHERE fuga BETWEEN ( # SELECT fuga+5, fuga+10 FROM hoge WHERE id=1 # ) # # みたいに簡単に書けないでしょうか。 # 上ふたつの書き方だと2回副問い合わせが走ってそうでおそくなる気がします。 # 'SELECT * FROM hoge WHERE fuga < (SELECT fuga+5 FROM hoge WHERE id=1 ) AND fuga > (SELECT fuga+10 FROM hoge WHERE id=1 )'(_id,_fuga) :- hoge(1,_fuga_1), hoge(_id,_fuga), _fuga > _fuga_1 + 5, _fuga < _fuga_1 + 10. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% テーブル構造(hoge,1,id). テーブル構造(hoge,2,fuga). 項目位置(hoge,id,[_id,_],_id). 項目位置(hoge,fuga,[_,_fuga],_fuga). 'SELECT * FROM hoge WHERE fuga < (SELECT fuga+5 FROM hoge WHERE id=1 ) AND fuga > (SELECT fuga+10 FROM hoge WHERE id=1 ) の 最も丁寧な解は'(_id,_fuga) :- findall(_,テーブル構造(hoge,_,_),L1), P1 =.. [hoge|L1], 項目位置(hoge,id,L1,1), 項目位置(hoge,fuga,L1,_fuga_1), call(P1), findall(_,テーブル構造(hoge,_,_),L2), P2 =.. [hoge|L2], 項目位置(hoge,id,L2,_id), 項目位置(hoge,fuga,L2,_fuga), call(P2), _fuga > _fuga_1 + 5, _fuga < _fuga_1 + 10. % 以下のサイトは # 出典::MySQL 総合 Part19 #173 # 質問させてください # selectしたデータを一部だけ別のテーブルに入れる方法ってありますか? # # 例:insert into table2 (aaa,bbb,ccc) select aaa as aaa,bbb as bbb,ccc as ccc from table1 # この場合table1のデータがすべてtable2に入るのでaaaだけ別のデータを入れたいと思っています。 # よろしくお願いします。 # # :- dynamic(table2/3). 海に接していない都道府県名([栃木県,群馬県,埼玉県,山梨県,長野県,岐阜県,滋賀県,奈良県]). table1(東京都,1000,aa). table1(埼玉県,2000,ab). table1(新潟県,3000,ac). table1(奈良県,2000,ad). selectしたデータを一部だけ別のテーブルに入れる方法 :- 海に接していない都道府県名(_海に接していない都道府県名ならび), selectしたデータを一部だけ別のテーブルに入れる方法(_海に接していない都道府県名ならび) :- forall(( table1の海に接している都道府県名を海に接していない都道府県名に置き換える(_海に接していない都道府県名ならび,_都道府県名の二,_bbb,_ccc), assertz(table2(_都道府県名の二,_bbb,_ccc))). table1の海に接している都道府県名を海に接していない都道府県名に置き換える(_海に接していない都道府県名ならび,_都道府県名の二,_bbb,_ccc) :- table1(_都道府県名の一,_bbb,_ccc), 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二). 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の一) :- 都道府県名の一が海に接していない場合はそのまま(_海に接していない都道府県名ならび,_都道府県名の一),!. 新しい都道府県名の生成(_海に接していない都道府県名ならび,_都道府県名の一,_都道府県名の二) :- 'table2に未出の都道府県名を_海に接していない都道府県名ならび から得る'(_海に接していない都道府県名ならび,_都道府県名の二),!. 都道府県名の一が海に接していない場合はそのまま(_海に接していない都道府県名ならび,_都道府県名の一) :- member(_都道府県名の一,_海に接していない都道府県名ならび),!. 'table2に未出の都道府県名を_海に接していない都道府県名ならび から得る'(_海に接していない都道府県名ならび,_都道府県名の二) :- 海に接していない都道府県名から_aaaを一つ選択する(_海に接していない都道府県名ならび,R,_aaa), 'table2に未出の都道府県名を_海に接していない都道府県名ならび から得る'(_海に接していない都道府県名ならび,R,_aaa,_都道府県名の二). 海に接していない都道府県名から_aaaを一つ選択する(_海に接していない都道府県名ならび,R,_aaa) :- 乱数を得る(_海に接していない都道府県名ならび,_乱数), nth1(_乱数,_海に接していない都道府県名ならび,_aaa), select(_aaa,_海に接していない都道府県名ならび,R). 乱数を得る(_海に接していない都道府県名ならび,_乱数) :- length(_海の接していない都道府県名ならび,_要素数), _要素数 > 0, _乱数 is random(_要素数) + 1, 'table2に未出の都道府県名を_海に接していない都道府県名ならび から得る'(_海に接していない都道府県名ならび,R,_都道府県名の二,_都道府県名の二) :- table2にその都道府県名は未出である(_都道府県名の二),!. 'table2に未出の都道府県名を_海に接していない都道府県名ならび から得る'(_海に接していない都道府県名ならび,R,_都道府県名の一,_都道府県名の二) :- 新しい都道府県名の生成(R,_都道府県名の一,_都道府県名の二). table2にその都道府県名は未出である(_都道府県名の二) :- \+(table2(_都道府県名の二,_,_)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/15 # # select id, info_date from t_information order by info_date desc; # というクエリで、 # +----+---------------------+ # | id | info_date | # +----+---------------------+ # | 18 | 2011-03-03 17:00:00 | # | 17 | 2011-03-03 15:00:00 | # | 16 | 2011-03-01 10:00:00 | # | 4 | 2011-01-13 14:00:00 | # | 3 | 2011-01-13 07:00:00 | # | 2 | 2011-01-13 03:00:00 | # | 1 | 2011-01-13 00:00:00 | # | 15 | 2011-01-12 00:00:00 | # +----+---------------------+ # というデータの場合に # info_dateを基準に目的idの次のidを取得したいです。 # 例えば目的idが15とすると、1を取得したいです。 # # mysqlです。 # よろしくおねがいします。 # t_information(18,'2011-03-03 17:00:00'). t_information(17,'2011-03-03 15:00:00'). t_information(16,'2011-03-01 10:00:00'). t_information( 4,'2011-01-13 14:00:00'). t_information( 3,'2011-01-13 07:00:00'). t_information( 2,'2011-01-13 03:00:00'). t_information( 1,'2011-01-13 00:00:00'). t_information(15,'2011-01-12 00:00:00'). 'キー値を基準に目的idの次のidを取得する'(_キー値,_id) :- findmin([_info_date,_id],( t_information(_id,_info_date), _info_date @> _キー値), [_info_date,_id]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/9 # # よくある質問4 # # (問) # 列の数が可変な問合せはどう書きますか? # # (答) # 標準SQLでは書けません。 # pivotという機能を搭載したDBMSなら一見書けそうですが実はやっぱり書けません。 # Oracle 11g以降でpivot xmlというキーワードを使用すれば一応可変っぽくはなります。 # が、素直にプロシージャを書くかアプリケーションで処理したほうが良いでしょう。 # # SQL Serverのpivot(2005以降) # http://ime.nu/msdn.microsoft.com/ja-jp/library/ms177410.aspx # http://ime.nu/www.sqlprof.com/blogs/sqldev/archive/2008/04/12/pivots-with-dynamic-columns-in-sql-server-2005-2008.aspx # # Oracleのpivot(11g以降) # http://ime.nu/download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_10002.htm#CHDCEJJE # http://ime.nu/www.oracle.com/technetwork/articles/sql/11g-pivot-097235.html # # 列の数が可変な問合せ(_テーブル名,_列ならび) :- P =.. [_テーブル名|_列ならび], call(P). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/12 # # 以下のようなテーブルがあるとします。 # [テーブル名:経費TBL] # 会社 , 部署 , 年度 , 月 , 経費 # ------------------------------- # AAA , AAA01 , 2009 , 1 , 10000 # AAA , AAA01 , 2009 , 1 , 20000 # AAA , AAA01 , 2009 , 2 , 30000 # AAA , AAA01 , 2009 , 3 , 40000 # BBB , AAA01 , 2009 , 4 , 50000 # BBB , AAA01 , 2010 , 1 , 60000 # CCC , AAA01 , 2010 , 1 , 70000 # CCC , AAA01 , 2010 , 1 , 80000 # # ここから以下のような、 # 会社別、部署別の集計データを作成したいとします。 # 会社 , 部署 , 200901経費計 , 200902経費計 , … , 201012経費計 # # この時、経費計列の条件指定はどうしたら良いのでしょうか? # # '会社別、部署別の集計データを作成したいとします。 会社 , 部署 , 200901経費計 , 200902経費計 , … , 2010122経費計 ' :- 見出し表示, findsetof([_会社,_部署],経費TBL(_会社,_部署,_,_,_),L1), append(_,[[_会社,_部署]]|R],L1), findall(_経費計,( 年度・月の生成(_年度,_月), findsum(_経費,( 経費TBL(_会社,_部署,_年度,_月,_経費)), _経費計)), _経費ならび), concat_atom(_経費ならび,',',_経費月別表示), write_formatted('%t,%t,%t\n',[_会社,_部署,_経費月別表示]), R = []. 年度・月の生成(2009,_月) :- for(1,_月,12). 年度・月の生成(2010,_月) :- for(1,_月,12). 見出し表示 :- write(' 会社 , 部署 '), 年度の生成(_年,_月), write_formatted_atom(S,', %4d%02d経費計 ',[_年,_月]), write(S), fail. 見出し表示 :- nl. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/8 # # よくある質問3 # # (問) # ID HOGE # 01 A # 01 B # 01 C # 02 A # 03 B # # HOGEをAもBもCも持っている、ID:01だけ取り出すにはどうすればよかですか # # (答1) # SELECT id # FROM TableName # WHERE hoge in ('A','B','C') # GROUP BY id # HAVING count(DISTINCT hoge) = 3 # ; # # (答2) # select * # from TableName T1 # where not exists (select * #          from (values 'A', 'B', 'C') T2 (HOGE) #          where not exists (select * #                   from TableName T3 #                   where T1.ID = T3.ID #                   and T2.HOGE = T3.HOGE #                   ) #          ) # ; # ※valuesの部分(Table Value Constructor)はDBMSによって文法がかなり違うので注意 # # 'HOGEをAもBもCも持っている、ID:01だけ取り出す'(L,_ID) :- findsetof(_ID,'TableName'(_ID,_)), 関係の割り算(_ID,L). 関係の割り算(_,[]):- !. 関係の割り算(_ID,[_HOGE|R]) :- 'TableName'(_ID,_HOGE), 関係の割り算(_ID,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/7 # # よくある質問2 # # (問) # key   data # ---------------- # 1     a # 1     a # 1     b # 1     b # 1     a # 2     b # 2     a # 2     a # # というテーブルから # # key   a   b # -------------------- # 1    3   2 # 2    2   1 # # というExcelのピボットの様なデータを取得したいのですが、どういうSQLになりますか? # a,bというのは固定なので、仮にcというデータがあっても無視して構いません。 # # (答) # SELECT key, #     SUM(CASE data WHEN 'a' THEN 1 END) AS a, #     SUM(CASE data WHEN 'b' THEN 1 END) AS b # FROM table # GROUP BY key # ORDER BY key # ; # 'Excelのピボットの様なデータを取得したい' :- findsetof(_data,table(_,_data),L1), findsetof(_key,table(_key,_data),L2), append(_,[_key|R],L2), findall(Count, count((append(_,[_data|_],L1),table(_key,_data)),Count), L3), concat_atom([_key|L3],',',S), write_formatted('%t\n',[S]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1299305530/6 # # よくある質問1 # # (問) # ID | DATE     | DATA # --+----------+----- # 1 | 2007-11-11 | aaa # 2 | 2007-11-11 | bbb # 1 | 2007-11-10 | ccc # 3 | 2007-11-12 | ddd # 3 | 2007-11-11 | eee # 4 | 2007-11-10 | fff # 1 | 2007-11-12 | ggg # # このようなテーブルから、下記のように # # 1 | 2007-11-12 | ggg # 3 | 2007-11-12 | ddd # 2 | 2007-11-11 | bbb # 4 | 2007-11-10 | fff # # 各idに対して最新の1件だけ抽出するSQLの書き方を教えてください。 # # (答) # select A.ID, #     A.DATE, #     A.DATA # from TableName A #    inner join #    (select ID, max(DATE) as MAX_DATE #     from TableName #     group by ID #    ) B #    on A.ID = B.ID #    and A.DATE = B.MAX_DATE # ; # 'TableName'(1,'2007-11-11',aaa). 'TableName'(2,'2007-11-11',bbb). 'TableName'(1,'2007-11-10',ccc). 'TableName'(3,'2007-11-12',ddd). 'TableName'(3,'2007-11-11',eee). 'TableName'(4,'2007-11-10',fff). 'TableName'(1,'2007-11-12',ggg). '各idに対して最新の1件だけ抽出する'(_ID,_DATE,_DATA) :- findsetof(_ID,'TableName'(_ID,_,_),L1), append(_,[_ID|_],L1), findmax([_DATE,_ID,_DATA],( 'TableName'(_ID,_DATE,_DATA)), [_DATE,_ID,_DATA]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/967 # # # ■DBMS名とバージョン # Firebird 1.03 # ■テーブルデータ (注文データベースのようなものです) # ・Main 主情報テーブルMIDがキー # MID HACCHUBI # 1 2011/03/01 # ・DETAIL 明細テーブルDIDがキー MID,IIDが参照キー # DID MID IID KOSU # 1  1  1  100 # 2  1  2  30 # ・ITEM 商品テーブルIIDがキー # IID NAMAE ZAIKO OPOINT BIKO # 1  HOGE  20  10   0 # 2  HUGA  50  5    1 # ■欲しい結果 # 2011/1/1から1/31の注文のあった各アイテムの個数(DETAIL.KOSU)の平均値が10以上の場合、 # 該当するアイテムの注文ライン(ITEM.OPOINT)に、その平均値を入れて更新。平均値が10未満の場合、 # ITEM.OPOINTに0を入れる。ただしアイテムの備考(ITEM.BIKO)が1の場合は、ITEM.OPOINTには # 空欄(NULL)にする。 # ■説明 # といいますか、上記の欲しい結果が全てなのですが、どう書いていいのかちょっと見当がつきません。 # 在庫の仕入れをする個数(ITEM.OPOINT)の設定をコンピュータにさせようとしているのですが・・・。 # 丸投げで申し訳ありませんが、どなたかお願いします。 '2011/1/1から1/31の注文のあった各アイテムの個数(DETAIL.KOSU)の平均値が10以上の場合、該当するアイテムの注文ライン(ITEM.OPOINT)に、その平均値を入れて更新。平均値が10未満の場合、ITEM.OPOINTに0を入れる。ただしアイテムの備考(ITEM.BIKO)が1の場合は、ITEM.OPOINTには空欄(NULL)にする' :- findsetof(_MID,( 'Main'(_MID,_HACCHUBI), _HACCHUBI @>= '20110101', _HACCHUBI @=< '20110131'), L1), findsetof(_IID,( 'DETAIL'(_DID,_MID,_IID,_KOSU), append(_,[_MID|_],L1)), L2), append(_,[IID|R],L2), findavg(_KOSU,( 'DETAIL'(_DID,_MID,_IID,_KOSU), append(_,[_MID|_],L1)), AVG), 'ITEM更新'(IID,AVG), R = []. 'ITEM更新'(IID,AVG) :- retract('ITEM'(_IID,_NAMAE,_ZAIKO,_OPOINT,'1')), assertz('ITEM'(_IID,_NAMAE,_ZAIKO,'',_BIKO)),!. 'ITEM更新'(IID,AVG) :- AVG >= 10, write_formatted_atom(S,'%t',[AVG]), retract('ITEM'(_IID,_NAMAE,_ZAIKO,_OPOINT,_BIKO)), assertz('ITEM'(_IID,_NAMAE,_ZAIKO,S,_BIKO)),!. 'ITEM更新'(IID,AVG) :- AVG < 10, retract('ITEM'(_IID,_NAMAE,_ZAIKO,_,_BIKO)), assertz('ITEM'(_IID,_NAMAE,_ZAIKO,'0',_BIKO)),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/923 # # 初歩的ですみません、相関副問合せでinの仕組みを教えてください。 # # in句の使いかたとして、 # select * from テーブル where フィールド1 in (値1,値2,値3) # みたいな使い方は素直に読めるのですが、 # # # 社員テーブル syain # id | name | busyoid | # ------------------ # 1  | yamada |100 | # 2  | satou |100 | # 3  | suzuki |200 | # # 部所テーブル busyo # busyoid | busyomei | # ------------------ # 100 | soumu | # 200 | eigyo | # # の2つのテーブルで、総務所属の人のみ抽出するとき、 # # select * from syain where 'soumu' in (select busyomei from busyo where busyo.busyoid = syain.busyoid) # # で答えが出るとき、where 'soumu' in(select文)のin句の使い方はどう理解すれば良いのでしょうか。 # 'select * from syain where ''soumu'' in (select busyomei from busyo where busyo.busyoid = syain.busyoid) をどう理解すればよいか'(_id,_name,_bushoid) :- 社員テーブル(_id,_name,_busyoid), findall(_busyomei,部署テーブル(_busyoid,_busyomei),L), member(soumu,L). 社員テーブル(1,yamada,100). 社員テーブル(2,satou,100). 社員テーブル(3,suzuki,200). 部所テーブル(100,soumu). 部所テーブル(200,eigyo). テーブル構造(社員テーブル,1,id). テーブル構造(社員テーブル,2,name). テーブル構造(社員テーブル,3,busyoid). テーブル構造(部所テーブル,1,busyoid). テーブル構造(部所テーブル,2,busyomei). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/895 # # MYSQLで動的ホームページを作っています。 # fileテーブルにそれぞれのページのデータを保存していて # accessテーブルにアクセスログを保存しています。 # # fileテーブルにはAIのページIDカラムがあり # accessテーブルにはアクセスされたページのIDカラムがあります # # ページ一覧ページで各ページのアクセス数を表示したいです。 # SELECT * FROM fileの結果と、SELECT count(*) FROM access WHERE id='アクセスされてページのID'の結果を結合させるSQL文を教えてください。 # # いまはPHPで # $query="SELECT * FROM file ORDER BY id DESC LIMIT"; # $result=mysql_query($query); # # while ($row = mysql_fetch_array($result)) { # $query2="SELECT count(*) AS id FROM access WHERE id = {$row['id']}"; # $result2=mysql_query($query2); # $row2= mysql_fetch_array($result2); # } # # という書き方をしていますが、クエリを一回で済ませたいです。 # よろしくお願いします。 # # ページ一覧ページで各ページのアクセス数を表示する :- findall([_ID,_page],( fileテーブル(_ID,_page)), L1), sort(L1,L2), reverse(L2,L3), write(' ID,ページ名,アクセス数\n'), append(_,[[_ID,_page]|R],L3), count(accessテーブル(_ID,_log),Count), write_formatted(' %t, %t, %t\n',[_ID,_page,Count]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/879 # # ・DBMS名とバージョン # oracle9i / 10g # ・テーブルデータ # 部署ID 大分類 中分類 小分類 予算 # -------+------+-------+------+--- # 01 01 01 01 2500 # 01 02 01 01 1000 # 01 02 02 02 100 # 02 01 01 01 100 # 02 01 02 02 0 # 02 02 02 02 1000 # 02 03 01 01 0 # 03 01 01 01 500 # # ・欲しい結果 # 上のテーブルの時、 # (大分類=01and予算>50) and (大分類=02and予算<2000) # の部署IDを取得したい。 # ・説明 # とりたい結果は01,02ですが上のSQLを # そのまま書くと当然結果はnullですし、 # 括弧の間のandをorにすると03も取得されてしまいます。 # なにか良い方法はないでしょうか? # # テーブルデータ('01','01','01','01',2500). テーブルデータ('01','02','01','01',1000). テーブルデータ('01','02','02','02',100). テーブルデータ('02','01','01','01',100). テーブルデータ('02','01','02','02',0). テーブルデータ('02','02','02','02',1000). テーブルデータ('02','03','01','01',0). テーブルデータ('03','01','01','01',500). '(大分類=01and予算>50) and (大分類=02and予算<2000)の部署IDを取得したい'(_部署ID) :- findsetof([_部署ID,_大分類],( テーブルデータ(_部署ID,_大分類,_,_,_)), L), findall([_部署ID,_大分類,_予算計],( append(_,[[_部署ID,_大分類]|_],L)), findsum(_予算,( テーブルデータ(_部署ID,_大分類,_,_,_予算)), _予算計)), _部署ID・大分類・予算計ならび), append(_,[[_部署ID,'01',_予算計_1]|_],_部署ID・大分類・予算計ならび), _予算計_1 > 50, append(_,[[_部署ID,'02',_予算計_2]|_],_部署ID・大分類・予算計ならび), _予算計_2 < 2000. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/879 # # ・DBMS名とバージョン # oracle9i / 10g # ・テーブルデータ # 部署ID 大分類 中分類 小分類 予算 # -------+------+-------+------+--- # 01 01 01 01 2500 # 01 02 01 01 1000 # 01 02 02 02 100 # 02 01 01 01 100 # 02 01 02 02 0 # 02 02 02 02 1000 # 02 03 01 01 0 # 03 01 01 01 500 # # ・欲しい結果 # 上のテーブルの時、 # (大分類=01and予算>50) and (大分類=02and予算<2000) # の部署IDを取得したい。 # ・説明 # とりたい結果は01,02ですが上のSQLを # そのまま書くと当然結果はnullですし、 # 括弧の間のandをorにすると03も取得されてしまいます。 # なにか良い方法はないでしょうか? # # テーブルデータ('01','01','01','01',2500). テーブルデータ('01','02','01','01',1000). テーブルデータ('01','02','02','02',100). テーブルデータ('02','01','01','01',100). テーブルデータ('02','01','02','02',0). テーブルデータ('02','02','02','02',1000). テーブルデータ('02','03','01','01',0). テーブルデータ('03','01','01','01',500). '(大分類=01and予算>50) and (大分類=02and予算<2000)の部署IDを取得したい'(_部署ID) :- テーブルデータ(_部署ID,_大分類_1,_,_,_予算_1), _大分類_1 = '01', _予算_1 > 50, テーブルデータ(_部署ID,_大分類_2,_,_,_予算_2), _大分類_2 = '02', _予算_1 < 2000. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/873 # # ・DBバージョン # MySQL5.0.77 # # id|_regDate_| # --+----------+ # 1 |2010-10-10| # 2 |2010-10-10| # 3 |2010-10-10| # 4 |2010-10-11| # 5 |2010-10-11| # 6 |2010-10-11| # 7 |2010-10-11| # 8 |2010-10-12| # 9 |2010-10-12| # 10|2010-10-12| # 11|2010-10-12| # # ・欲しい結果 # 何件レコードがあったかを日別に出力したい。 # # 例として # _regDate__|件数 # ----------+- # 2010-10-10|3 # 2010-10-11|4 # 2010-10-12|4 # # こうなってるとうれしいです。 # # ・説明 # 自前でクリックカウンターを作っております。 # ほかにカラムとしてユーザーエージェントやリモートホストのアドレスを設置してありまして # 日別に集計して見れるようにしたいと思ったのですが、PHPでループを書いて出力するより # SQLの問い合わせ段階で、上記のように整形できないかなと思いました。 # # よろしくお願いいたします。 # # 何件レコードがあったかを日別に出力する :- write('-- 日付 --|件数\n'), findsetof(_日付,テーブル(_id,_日付),L), append(_,[_日付|R],L), count(テーブル(_id,_日付),_件数), write_formatted('%t|%t\n',[_日付,_件数]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/872 # # ・DBバージョン # MySQL5.0.77 # # id | code | name # --+-----+------ # 1 | 10  | aaa # 2 | 20  | bbb # 3 | 20  | ccc # 4 | 30  | ddd # 5 | 30  | eee # 6 | 30  | fff # 7 | 40  | ggg # 8 | 40  | hhh # # ・欲しい結果 # (code)グループ単位でn件を取得する # # ・説明 # code毎に抽出する行数の上限を指定したいです # postgresでは # http://ime.nu/blogs.wankuma.com/kacchan6/archive/2007/06/07/79946.aspx # oracleでは # http://ime.nu/www.ne.jp/asahi/hishidama/home/tech/oracle/rownum.html#TopN_partition_by # のようなことをmysqlで書きたいです # よろしくお願いします # '抽出する行数の上限'('10',2). '抽出する行数の上限'('20',2). '抽出する行数の上限'('30',2). '抽出する行数の上限'('40',1). '抽出する行数の上限'('50',2). '抽出する行数の上限'('60',1). '(code)グループ単位でn件を取得する'([_id,_code,_name]) :- findasetof(_code,テーブル(_,_code,_),L1), append(_,[_code|R],L1), findall([_id,_code,_name],テーブル(_id,_code,_name),L2), '抽出する行数の上限'(_code,_行数の上限), 行数の上限以内に丸める(L2,_行数の上限,L3), append(_,[[_id,_code,_name]|_],L3). 行数の上限以内に丸める(L2,_行数の上限,L) :- length(L,_行数の上限), append(L,_,L2),!. 行数の上限以内に丸める(L,_行数の上限,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/867 # # はじめまして。ど素人なので教えを請いたいです。 # # ・MySQL使用 # # ・テーブルデータ # test_table # # id|memo # -------- # 1| 1st # -------- # 1| win # -------- # 1| 1 # -------- # 2| 1 # -------- # 2| 2nd # -------- # # これをこっちからidやmemoの値を入力して、テーブルのその部分だけ表示させた # いのです。 # 例えば # ・idの欄に1、memoの欄にwinを入力し、実行ボタンを押す #  ↓ # id|memo # -------- # 1| win # -------- # が表示される # # ・memoの欄に1を入力し、idは空欄 #  ↓ # id|memo # -------- # 1| 1 # -------- # 2| 1 # -------- # が表示される # # # といったように、片方だけの入力でも両方の入力でもそれに対応したものが表示 # されるものが作りたいのです。 # どうかよろしくおねがいします。 # 片方だけの入力でも両方の入力でもそれに対応したものが表示される(_id,_memo) :- findall([_id,_memo],table_data(_id,_memo),L), append(_,[[_id,_memo]|R],L), write('id|memo\n-------\n'), write_formatted('%t| %t\n',[_id,_memo]), write('-------\n'), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/895 # # MYSQLで動的ホームページを作っています。 # fileテーブルにそれぞれのページのデータを保存していて # accessテーブルにアクセスログを保存しています。 # # fileテーブルにはAIのページIDカラムがあり # accessテーブルにはアクセスされたページのIDカラムがあります # # ページ一覧ページで各ページのアクセス数を表示したいです。 # SELECT * FROM fileの結果と、SELECT count(*) FROM access WHERE id='アクセスされてページのID'の結果を結合させるSQL文を教えてください。 # # いまはPHPで # $query="SELECT * FROM file ORDER BY id DESC LIMIT"; # $result=mysql_query($query); # # while ($row = mysql_fetch_array($result)) { # $query2="SELECT count(*) AS id FROM access WHERE id = {$row['id']}"; # $result2=mysql_query($query2); # $row2= mysql_fetch_array($result2); # } # # という書き方をしていますが、クエリを一回で済ませたいです。 # よろしくお願いします。 # # ページ一覧ページで各ページのアクセス数を表示する :- findall([_ID,_page],( fileテーブル(_ID,_page)), L1), sort(L1,L2), reverse(L2,L3), write(' ID,ページ名,アクセス数\n'), append(_,[[_ID,_page]|R],L3), count(accessテーブル(_ID,_log),Count), write_formatted(' %t, %t, %t\n',[_ID,_page,Count]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/846 # # ・DBMS名とバージョン #  Microsoft Access2000 # # ・テーブルデータ # 【ITEM_COUNT】 # item_id | year | month | count # --------------------------- # 00001  | 2010 |   1 |  150 # 00001  | 2010 |   1 |  400 # 00001  | 2010 |   2 |   20 #   (中略) # 00001  | 2010 |  11 |  120 # 00001  | 2010 |  11 |   50 # 00001  | 2010 |  11 |  200 # 00001  | 2010 |  12 |   30 # 00001  | 2011 |   1 |  500 # 00001  | 2011 |   1 |  100 # 00002  | 2010 |   1 |   10 # 00002  | 2010 |   2 |   30 # 00002  | 2010 |   2 |  100 #   (後略) # ※同じid, year, monthのデータが複数存在します。 # # # ・欲しい結果 # item_id | 1月 | 2月 | … | 11月 | 12月 | 13月 # -------------------------------------------- # 00001  | 550 |  20 | … | 370 |  30 | 610 # 00002  |  10 | 130 | … | (後略) # # ※2010/1〜2011/1の13ヶ月間を1月〜13月として(2011/1を13月として)それぞれ集計を求めたい # # # ・説明 # 現状は、 # ------------------------------------ # SELECT #  year, item_id # FROM #  ITEM_COUNT # WHERE #  year=2010 # GROUP BY #  item_id, year # PIVOT #  Format(month,"#0月") In ("1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); # ------------------------------------ # 上のクエリを「集計1」、WHERE句を"year=2011"に変更したものを「集計2」とし、 # 次のクエリで結果を求めています。 # ------------------------------------ # SELECT #  集計1.item_id, 集計1.[1月], 集計1.[2月], … , 集計1.[12月],集計2.[1月] AS 13月 # FROM #  集計1 LEFT JOIN 集計2 ON 集計1.[item_id] = 集計2.[item_id] # ------------------------------------ # # しかしこれだと2011/1にのみデータがあるitem_idが集計から外れてしまいます。 # これを回避するにはどのように直したら良いでしょうか。 # # 年度を俣いで月合計を表示する :- findsetof([_item_id],( 'ITEM_COUNT'(_item_id,_year,_month,_count)), L1), findall([_item_id,_合計回数ならび],( append(_,[_item_id|_],L1), '2010年集計'(_2010年counts), '2011年集計'(_2011年counts), append(_2010年counts,_2011年counts,_合計回数ならび)), _集計ならび), 見出し表示, append(_,[[_itemp_id,_合計回数ならび]|R],_集計ならび), write_formatted(' %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d | %3d\n',_合計回数ならび), R = []. 見出し表示 :- append(_,[_月|R],['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']), write_formatted(' %3s |',[_月]), R = [], write(' 13月\n'),!. '2010年集計'(_item_id,2010,_month,_合計回数) :- for(1,_month,12), findsum(_count,'ITEM_COUNT'(_item_id,2000,_month,_count),_合計回数). '2011年集計'(_item_id,2011,_month,_合計回数) :- findsum(_count,'ITEM_COUNT'(_item_id,2011,1,_count),_合計回数). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1296387672/11 # # [1] 授業単元:C言語の基礎 # [2] 問題文 #  「複数の異なるデータ型を持つ情報に対して、情報の回覧と追加ができ、 #  ファイルの読込とができるプログラムを作成しなさい。 #  たとえば名簿のような物で、氏名、電話番号、住所、整理番号などを #  読込、書込、保存をする。可能なら、検索もできるようにすると良い。 #  複数のデータを扱うために、構造体を持つ配列を使うこと。 #  また、メンバ数は6個以上の情報を扱うこと。 #  ファイル形式は、CSV形式で、1つの情報の関連データ(メンバ)はカンマで区切り、 #  別の情報データ(行)は改行で区別しなさい。ファイル名の拡張子はcsv。 #  データファイルはプログラム起動時にコマンドラインから入力できること。 #  また、そうではないことにも対応すること。」 # リーディング情報の読み込み(_データファイル,LL) :- get_split_lines(_データファイル,[','],LL), append(_,[L|R],LL), P =.. [リーディング情報|L], assertz(P), R = [],!. リーデング情報の保存(_データファイル) :- open(_データファイル,write,Outstream), リーデング情報の書き込み(Outstream), close(Outstream). リーデング情報の書き込み(Outstream) :- リーデング情報(_順位,_種牡馬名,_毛色,_産地,_出走頭数,_勝馬頭数,_出走回数,_勝利回数,_産駒の総収得賞金,_産駒の出走頭数), concat_atom([_順位,_種牡馬名,_毛色,_産地,_出走頭数,_勝馬頭数,_出走回数,_勝利回数,_産駒の総収得賞金,_産駒の出走頭数],',',S), write_formatted(Output,'%t\n',[S]), fail. リーデング情報の書き込み(Outstream). 情報の回覧(LL) :- write('順位,種牡馬名,毛色,産地,出走頭数,勝馬頭数,出走回数,勝利回数,賞金,1出走賞金,1頭平均賞金,勝馬率,アーニング・インデックス\n'), リーデング情報(_順位,_種牡馬名,_毛色,_産地,_出走頭数,_勝馬頭数,_出走回数,_勝利回数,_産駒の総収得賞金,_産駒の出走頭数), _1出走賞金 is truncate(_賞金 / _出走回数), _1頭平均賞金 is truncate(_賞金 / _出走頭数) _勝馬率 is _勝馬頭数 / _出走頭数, アーニング・インデックスの算出(_種牡馬名,_アーニング・インデックス), write_formatted('%t,%t,%t,%t,%t,%t,%t,%t,%t,%t,%t,%t,%t\n',[_順位,_種牡馬名,_毛色,_産地,_出走頭数,_勝馬頭数,_出走回数,_勝利回数,_1出走賞金,1頭,_平均賞金,_勝馬率,_アーニング・インデックス]), fail. 情報の回覧(LL). リーディング情報の追加 :- write('指示に従い各項目を入力してください\n'), リーディング情報項目(_項目,_項目のタイプ), リーディング情報項目の入力(_項目,_項目のタイプ,_項目値ならび), P =.. [リーデング情報|_項目値ならび], assertz(P),!. リーディング情報項目の入力(_項目,_項目のタイプ,_項目値ならび) :- findall(_項目値,( リーディング情報項目(_項目,_項目のタイプ), 項目の入力(_項目,_項目のタイプ,_項目値)), _項目値ならび). 項目の入力(_項目,文字列,_項目値) :- write_formatted('%t (文字列) を入力してください : ',[_項目]), get_line(_項目値),!. 項目の入力(_項目,整数,_項目値) :- write_formatted('%t (整数)を入力してください : ',[_項目]), get_line(Line), 項目の入力診断(_項目,整数,Line,_項目値),!. 項目の入力(_項目,整数,_項目値) :- 項目の入力(_項目,整数,_項目値). 項目の入力診断(_項目,整数,Line,_項目値) :- atom_to_term(Line,_項目値,_), integer(_項目値),!. 項目の入力診断(_項目,整数,Line,_項目値) :- write_formatted('入力された%tからは%tにふさわしい整数を得られませんでした。再入力をお願いします。\n',[Line,_項目]), fail. % 産駒の総収得賞金/2,産駒の出走頭数/2,全出走馬収得賞金/1,総出走頭数/1 は未定義である。 % これらの述語をデータベースと定義した上で、アーニング・インデックスを算出する。 アーニング・インデックスの算出(_種牡馬名,_アーニングインデックス) :- 産駒の総収得賞金(_種牡馬名,_産駒の総収得賞金), 産駒の出走頭数(_種牡馬名,産駒の出走頭数), 全出走馬収得賞金(_全出走馬収得賞金), 総出走頭数(_総出走頭数), _アーニング・インデックス is ( _産駒の総収得賞金 / _産駒の出走頭数 ) / ( _全出走馬収得賞金 / _総出走頭数),!. リーディング情報項目(順位,整数). リーディング情報項目(種牡馬名,文字列). リーディング情報項目(毛色,文字列). リーディング情報項目(産地,文字列). リーディング情報項目(出走頭数,整数). リーディング情報項目(勝馬頭数,整数). リーディング情報項目(出走回数,整数). リーディング情報項目(勝利回数,整数). リーディング情報項目(賞金,整数). /* リーディング情報項目(1出走賞金,整数). リーディング情報項目(1頭平均賞金,整数). リーディング情報項目(勝馬率,浮動小数点数).). リーディング情報項目(アーニング・インデックス,浮動小数点数). */ % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/830 # # MySQL 5.1を使っているのですが、 # リストにabc,def,ghiのように単語が登録されているとき、 # "hogehogeabchogehogehogeghihogejklhogehoge"という文から、 # abc,ghiという単語がこの文に含まれているというような検索をしたいのですが、書き方がわかりません。 # それ以前に、データベースでこのような検索は可能ですか? # # 'リストにabc,def,ghiのように単語が登録されているとき、abc,ghiという単語がこの文に含まれているというような検索'(_単語ならび,_文字列,_すべての単語が文字列中に現れる単語の組み合わせならび) :- length(_単語ならび,Len), findall(L,( for(Len,N,1), 組み合わせ(_単語ならび,N,L), すべての要素が文字列中に現れる(L,_文字列)), _すべての単語が文字列中に現れる単語の組み合わせならび). すべての要素が文字列中に現れる([],_) :- !. すべての要素が文字列中に現れる([A|R],_文字列) :- sub_atom(_文字列,_,_,_,A), すべての要素が文字列中に現れる(R,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/820 # # eventId / eventName / userId の3つのカラムがあるイベント登録用テーブル(tableE)があります。 # これに対して、 # reportId / reportTxt / userId / eventId の形のイベントの感想用テーブル(tableR)を作ってます。 # # この時 tableE.eventId==tableR.eventIdとしたいです。(※) # # この条件で、tableRへのinsertクエリを書くとしたらどうすべきでしょうか。 # プログラム(php)からはeventIdがパラメータ(getメソッド)で送られてくるので # 単純にその値をセットしてのinsertは出来るんですが、getメソッドのためユーザーが # いくらでもeventIdを変更できてしまいます # sql文だけで、(※)の条件を実現することは出来ますか? # サブクエリ?を使うのかなと思ったもののよくわかりません # # 登録時に他テーブルに存在するIDの既出チェックを行う(_reportId,_reportTxt,_userId,_eventId) :- 'TableE'(_eventId,_eventName,_userId), assertz('TableR'(_reportId,_reportTxt,_userId,_eventId)),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/815 # # こんなレコードが格納されているとします。 # ID,NO # 100,1 # 102,2 # 101,3 # 200,1 # 201,2 # 202,3 # この場合、IDを100番台、200番台でグルーピングして、各グループ毎にNO順にSELECTで出力しようとした場合、どのような条件にすればよいでしょうか? # IDはこの例では3桁ですが、実際には6桁程あり、出来ればWHERE句で数字を入れて指定するような事はせずに並び替えが出来ると嬉しいです。 # 要は、レコードが増えてグループが増えたりしても、条件を変えずに並び替えが出来るようなものが良いのですが、可能でしょうか? # 宜しくご教示願います。 # # 'IDを100番台、200番台でグルーピングして、各グループ毎にNO順に出力する' :- findsetof(_ID,( テーブル(_ID,_NO), _ID_1 is (_ID // 100) + 1), _IDグループならび), findall(LL1,( append(_,[_ID_1|_],_IDグループならび), findall([_NO,_ID],( テーブル(_ID,_NO), _ID_1 is (_ID // 100) + 1), LL1)), LL2), 各グループ毎にNO順に出力する(LL2). 各グループ毎にNO順に出力する(LL) :- append(_,[L1|R1],LL), 整列(L1,L2), append(_,[[_NO,_ID]|R2],L2), write_formatted('%t,%t\n',[_ID,_NO]), R2 = [], R1 = [],!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1294061094/778 # # [1] 授業単元:C言語 # [2] 問題文(含コード&リンク): # n本の棒がある。棒i(3<n<100)の長さはa_i(1<a_i<10^4)である。 # あなたは、それらの棒から3本を選び、「できるだけ周長の長い三角形」と「できるだけ周長の短い三角形」 # を作ろうと考えている。それぞれ最大・最短の周長と選択した棒の組を求めるプログラムを作成せよ。 # ただし、どのような棒の組を選んでも三角形が作れない場合、0を答えとして返せ。 # プログラムの要件として、以下の事項を定める。 # ・引数として棒の長さデータが収められたファイル名のみが与えられるものとする。 # ・結果として、標準出力に、最大周長と棒の組み合わせ、最短周長と棒の組み合わせが出力されること。 # # % cat length.dat # 2 3 4 5 10 # % ./a.out length.dat # 最大周長=12 (3 4 5) # 最短周長=9 (2 3 4) # # %cat length.dat # 4 5 10 20 # % ./a.out length.dat # 0 # program :- user_parameters([_ファイル名]), get_lines(_ファイル名,Lines), findall(N,( append(_,[Line|_],Lines), sqlit(Line,[' '],L2), append(_,[N|_],L2)), _棒の長さならび), 周囲が最大の三角形(_棒の長さならび,[A1,B1,C1]), 周囲が最短の三角形(_棒の長さならび,[A2,B2,C2]), write_formatted('最大周長=%t (%t %t %t)\n',[_最大周長,A1,B1,C1]), write_formatted('最短周長=%t (%t %t %t)\n',[_最短周長,A2,B2,C2]). fail. program. 周囲が最大の三角形(_棒の長さならび,[A,B,C],_最大周長) :- 最大周長を得る(_棒の長さならび,_最大周長), 周長から三辺を得る(_棒の長さならび,_最大周長,A,B,C). 最大周長を得る(_棒の長さならび,_最大周長) :- findmax(_周囲,( 組み合わせ(_棒の長さならび,3,[A,B,C]), C > A + B, B > A + C, A > B + C, _周囲 is A + B + C), _最大周長),!. 周囲が最短の三角形(_棒の長さならび,[A,B,C]) :- 最短周長を得る(_棒の長さならび,_最短周長), 周長から三辺を得る(_棒の長さならび,_最大周長,A,B,C). 最短周長を得る(_棒の長さならび,_最短周長) :- findmin(_周囲,( 組み合わせ(_棒の長さならび,3,[A,B,C]), C > A + B, B > A + C, A > B + C, _周囲 is A + B + C), _最短周囲). 周長から三辺を得る(_棒の長さならび,_周長,A,B,C) :- 組み合わせ(組み合わせ(_棒の長さならび,3,[A,B,C]), 組み合わせ(_棒の長さならび,3,[A,B,C]), _周長 is A + B + C, C > A + B, B > A + C, A > B + C. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/810 # # MySQL5.1を使っています。 # # datetime型のテーブルに # # 元データ 16/Jan/2011:06:26:54 # # のフォーマットで入力したいのですが、どのようにすればよいのでしょうか。 # 色々調べましたが、わかりません。 # # 是非、アドバイスください。おねがいします! # # 'datetime型のテーブルに 元データ 16/Jan/2011:06:26:54 のフォーマットで入力したい'(_元データ,_datetime型入力文字列) :- sPLIT(_元データ,['/',':'],[A,B,C,D,E,F]), 月略表記(_月文字列,B), concat_atom([C,'-',_月文字列,'-'A,' ',D,':',E,':',F],_datetime型入力文字列). 月略表記('01','Jan'). 月略表記('02','Feb'). 月略表記('03','Mar'). 月略表記('04','Apr'). 月略表記('05','May'). 月略表記('06','Jun'). 月略表記('07','Jul'). 月略表記('08','Aug'). 月略表記('09','Sep'). 月略表記('10','Oct'). 月略表記('11','Nov'). 月略表記('12','Dec'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/777 # # 【質問テンプレ】 # # ・DBMS名とバージョン # Mysql 4.0.27 # # ・テーブルデータ # a_tbl # ID | DATE     | DATA # --+----------+----- # 1 | 20081111 | あああ # 2 | 20071111 | いいい # # b_tbl # ID | DATE     | DATA # --+----------+----- # 1 | 20081110 | えええ # 2 | 20081109 | おおお # # c_tbl # ID | DATE     | DATA # --+----------+----- # 1 | 20081108 | ききき # 2 | 20071109 | くくく # # # ・欲しい結果 # # ID | DATE     | DATA # --+----------+----- # a1 | 20081111 | あああ # b1 | 20081110 | えええ # b2 | 20081109 | おおお # c1 | 20081108 | ききき # # # ・説明 # 上記のような別々の3つのテーブルからDATEの新しい順にソートして、 # かつ各テーブルの行データを出力したいのですが、 # どのようにすればよいでしょうか? # # '別々の3つのテーブルから、かつ各テーブルの行データを出力する' :- findall([_DATE,_TID,_DATA],( a_table(_ID,_DATE,_DATA), concat_atom([a,_ID],_TID)), LL1), findall([_DATE,_TID,_DATA],( b_table(_ID,_DATE,_DATA), concat_atom([b,_ID],_TID)), LL2), findall([_DATE,_TID,_DATA],( a_table(_ID,_DATE,_DATA), concat_atom([a,_ID],_TID)), LL3), 'DATEの新しい順にソートして'(LL1,LL2,LL3,LL), 各テーブルの行データを出力する(LL). 'DATEの新しい順にソートして'(LL1,LL2,LL3,LL) :- sort(LL1,LL12), sort(LL2,LL22), sort(LL3,LL32), merge_sort(LL12,LL22,LL4), merge_sort(LL4,LL32,LL),!. merge_sort([],L,L) :- !. merge_sort(L,[],L) :- !. merge_sort([A|R1],[B|R2],[A|R3]) :- A @>= B, merge_sort(R1,[B|R2],R3),!. merge_sort([A|R1],[B|R2],[B|R3]) :- A @< B, merge_sort([A|R1],R2,R3),!. 各テーブルの行データを出力する(LL) :- append(_,[[_DATE,_TID,_DATA]|R],LL), write_formatted('%t,%t,%t\n',[_TID,_DATE,_DATA]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/613 # # MySQLダンプ内の # # /*------------------ここから--------------------*/ # DROP TABLE IF EXISTS `table100`; # /*!40101 SET @saved_cs_client = @@character_set_client */; # /*!40101 SET character_set_client = utf8 */; # CREATE TABLE `table100` ( # `code1` varchar(5) default NULL, # `zip1` varchar(7) default NULL, # `address1` varchar(250) default NULL, # `address2` varchar(250) default NULL, # `div_1` varchar(1) default NULL, # `div_2` varchar(1) default NULL, # `import_date` timestamp NULL default NULL, # `rec_key1` int(10) unsigned NOT NULL auto_increment, # PRIMARY KEY (`rec_key1`) # ) ENGINE=InnoDB AUTO_INCREMENT=121471 DEFAULT CHARSET=eucjpms; # /*!40101 SET character_set_client = @saved_cs_client */; # /*------------------ここまで--------------------*/ # # `table100` → `TABLE100` # `code1` → `CODE1` # など逆クォートで囲まれた小文字→大文字変換を一括で行いたいです。。 # できればlinux コマンドライン、perl などでお願いします。。 # '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_文字列,_変換した文字列) :- sub_atom(_文字列,St,Len,_,S1,S2,S3,L1,['`'|R2],['`'|R3]), \+(append(_,['`'|_],R2)), concat_atom(R2,S22), to_upper(S22,_大文字化した文字列), concat_atom(S1,'`',_大文字化した文字列,'`'],_変換した文字列1), concat_atom(R3,_残り文字列), '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_残り文字列,_変換した文字列2), atom_concat(_変換した文字列1,_変換した文字列2,_変換した文字列),!. '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/773 # # sqlite3を使用しています。 # 並び変えたデータの100番目以降を消したいのですが方法が見つかりません。 # どなたか分かる方がいましたらよろしくお願いします。 # # delete from TableName where KEY_COLUMN in (select KEY_COLUMN from TableName order by ORDER_COLUMN limit -1 offset 100); # '定義節のN番目以降をすべて削除する'(N番目,_述語名/_アリティ) :- 定義節をならびに写し取る(_述語名/_アリティ,_定義節ならび), 先頭からN番目の節までを切り取る(N番目,_定義節ならび,_先頭からN番目までの定義節ならび), 一旦述語定義を解消する(_述語名/_アリティ), 述語を定義し直す(_先頭からN番目までの定義節ならび),!. 定義節をならびに写し取る(_述語名/_アリティ,_定義節ならび) :- length(L,_アリティ), P =.. [_述語名|L], findall([(P :- Q),Varlist],( clause_with_names(P,Q,Varlist)), _定義節ならび),!. 先頭からN番目の節までを切り取る(N番目,_定義節ならび,_先頭からN番目までの定義節ならび) :- length(_先頭からN番目までの定義節ならび,N番目), append(_先頭からN番目までの定義節ならび,_,_定義節ならび),!. 一旦述語定義を解消する(_述語名/_アリティ) :- abolish(_述語名/_アリティ). 述語を定義し直す(先頭からN番目までの定義節ならび) :- append(_,[[(P :- Q),Varlist]|R],_先頭からN番目までの定義節ならび), assertz_with_names((P :- Q),Varlist), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1267796762/721 # # 【課題】Studentというクラスを宣言するプログラムを作成せよ。インスタンス変数には、氏名、生年月日、学籍番号を記録せよ。 # ただし、学籍番号は入学年度を表す二桁の整数、学部を表す一桁の整数、残り四桁の整数を組み合わせた七桁の整数で表現されるものとする。 # インスタンスメソッドとしては、以下のものは必須とする。 # 名字を返すメソッド、名前を返すメソッド、誕生年を和暦で返すメソッド、誕生年を西暦で返すメソッド、入学年度を返すメソッド # 【形態】1. Javaアプリケーション # 【期限】1月11日 # 【ver】linux # 【補足】あまり難しくしないでください。 # データベース構造(学生,1,氏名). データベース構造(学生,2,誕生日). データベース構造(学生,3,学籍番号). 名字を返す(_学籍番号,_名字) :- 学籍番号変換(_学籍番号,_整数学籍番号), 学生(_氏名,_誕生日,_整数学籍番号), split(_氏名,[' ',',','-','_'],[_名字,_]). 名前を返す(_学籍番号,_名前) :- 学籍番号変換(_学籍番号,_整数学籍番号), 学生(_氏名,_誕生日,_整数学籍番号), split(_氏名,[' ',',','-','_'],[_,_名前]). 誕生年を和暦で返す(_学籍番号,_誕生日の和暦) :- 学籍番号変換(_学籍番号,_整数学籍番号), 学生(_氏名,_誕生日,_整数学籍番号), 和暦西暦変換(_誕生日の和暦,_誕生日). 誕生年を西暦で返す(_学籍番号,_誕生日の西暦) :- 学籍番号変換(_学籍番号,_整数学籍番号), 学生(_氏名,_誕生日の西暦,_整数学籍番号). 入学年度を返す(_学籍番号,_入学年度) :- 学籍番号変換(_学籍番号,_整数学籍番号), _入学年度 is _整数学籍番号 // 10000. 学籍番号変換(_学籍番号,_学籍番号) :- integer(_学籍番号),!. 学籍番号変換(_学籍番号,_整数学籍番号) :- \+(integer(_学籍番号)), atom_chars(_学籍番号,Chars), すべてが数字(Chars), atom_to_term(_学籍番号,_整数学籍番号,_),!. 学籍番号変換(_学籍番号ではなくて氏名,_整数学籍番号) :- atom(_学籍番号ではなくて氏名), 学生(_学籍番号ではなくて氏名,_,_整数学籍番号),!. すべてが数字([]) :- !. すべてが数字([A|R]) :- append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']), すべてが数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1289816228/237 # # プログラム初心者です。 # 寺の門徒のデータベースを作って管理したいと考えています。 # # データの項目としては # 故人のデータ:法名、俗名、命日(年月日)、年齢、続柄、世帯主 # 世帯主のデータ:氏名、住所、電話番号 # お布施のデータ:世帯主、金額、年月日、種類(月参り、会費、法事・・・) # (どのようにまとめたらいいかはまだ考え中です) # # やりたいことは、 # 1.2011年の年回忌(1,3,7,13,17、・・・)のデータを抽出して世帯主宛に案内の文面を作る # 2.故人のデータ(命日)から中陰表(七日毎のお参りの日程表)を作る # 3.会計 # # 故人のデータや世帯主のデータはExcelで入力済ですが、 # そこから簡単に(数クリックで)1.2のようなことができないかと考えています。 # どのようなプログラムを使えばよいのでしょうか? # 寺名(大徳寺芳春院). '2014年の年回忌(1,3,7,13,17、・・・)のデータを抽出して世帯主宛に案内の文面を作る' :- '2014年の年回忌データの抽出'([1,3,7,13,17,23,27,33,50],_2014年の年回忌データならび), 回忌案内の作成(_2014年の年回忌データならび). '2014年の年回忌データの抽出'([],[]) :- !. '2014年の年回忌データの抽出'([_回忌|R1],[[_回忌,_年回忌データ]|R2]) :- '2014年の年回忌と命日の年変換'(_回忌,_命日の年), findall([_法名,_俗名,_命日,_年齢,_続柄,_世帯主,_住所,_電話番号],( 故人情報(_法名,_俗名,_命日,_年齢,_続柄,_世帯主,_住所,_電話番号)), _年回忌データ), '2014年の年回忌データの抽出'(R1,R2). '2014年の年回忌と命日の年変換'(1,2013) :- !. '2014年の年回忌と命日の年変換'(_回忌,_年) :- _年 is 2014 - _回忌 + 1,!. 故人情報(_法名,_俗名,_命日,_年齢,_続柄,_世帯主,_住所,_電話番号) :- 故人のデータ(_法名,_俗名,_命日,_年齢,_続柄,_世帯主), sub_atom(_命日,0,4,_,_命日の年), _世帯主=_氏名, 世帯主のデータ(_氏名,_住所,_電話番号). 回忌案内の作成([]) :- !. 回忌案内の作成([[_回忌|_回忌データならび]|R]) :- 回忌を指定して回忌案内の作成(_回忌,_回忌データならび), 回忌案内の作成(R). 回忌を指定して回忌案内の作成(_回忌,[_回忌データ|R]) :- 世帯主宛に案内の文面を作る(_回忌,_回忌データ), 回忌を指定して回忌案内の作成(_回忌,R). 世帯主宛に案内の文面を作る(1,[_法名,_俗名,_命日,_年齢,_続柄,_世帯主,_住所,_電話番号]) :- 寺名(_寺名), writef('一周忌法要のご案内\n%t様御中\n今年は故%t様(法名%t)の一周忌のご法要の年となりました。\n%tでは檀家の皆様が故人を偲び\n仏様と故人、そして皆様のめぐりあいの場として\n一周忌法要の準備を整えております。\nここにご案内申しあげます。\n',[_世帯主,_俗名,_法名,_寺名]),!. 世帯主宛に案内の文面を作る(_回忌,[_法名,_俗名,_命日,_年齢,_続柄,_世帯主,_住所,_電話番号]) :- 寺名(_寺名), 回忌の数字変換(_回忌,_回忌漢字表現), writef('%t回忌法要のご案内\n%t様御中\n今年は縁深き故%t様(法名%t)の%t回忌のご法要の年となりました。\n%tでは檀家の皆様が故人を偲び\n仏様と故人、そして皆様のめぐりあいの場として\n%t回忌法要の準備を整えております。\nここにご案内申しあげます。\n',[_回忌漢字表現,_世帯主,_俗名,_法名,_回忌漢字表現,_寺名,_回忌漢字表現]). 回忌の数字変換([1,3,7,13,17,23,27,33,50],[一,三,七,十三,十七,二十三,二十七,三十三,五十]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 故人のデータ(死死死死生生生生居士,尾崎隆大,'20111009',38,長男,尾崎作蔵). 世帯主のデータ(尾崎作蔵,'京都市右京区花園天授ケ岡888','075-444-9999'). /* '中陰表(七日毎のお参りの日程表)を作る'(_中陰逮夜,_故人の命日,_中陰逮夜日) :- 中陰逮夜(_中陰逮夜), 中陰逮夜(_中陰逮夜,_故人の命日,_中陰逮夜日). 中陰逮夜(初七日,_命日,_初七日) :- '5日後'(_命日,_初七日). 中陰逮夜(_初月忌,_命日,_中陰) :- '翌月の同日'(_命日,_中陰). 中陰逮夜(_満中陰,_命日,_中陰) :- 中陰逮夜(百箇日,_命日,_中陰) :- 中陰逮夜(_中陰,_命日,_中陰) :- sub_atom(_中陰,2,1,_,日), sub_atom(_中陰,0,2,_,_数字漢字表現), list_nth(Nth,[二十七,三十七,四十七,五十七,六十七],_数字漢字表現), list_nth(Nth,[27,37,47,57,67], N_1 is N - 1, 'n日後'(N_1,_命日,_中陰). 中陰逮夜(初七日). 中陰逮夜(二七日). 中陰逮夜(三七日). 中陰逮夜(四七日). 中陰逮夜(初月忌). 中陰逮夜(五七日). 中陰逮夜(六七日). 中陰逮夜(満中陰). 中陰逮夜(百箇日). */ % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/758 # # MySQLで、複数の行のそれぞれ狙った項目だけを一度に更新する方法はありますか? # # 例えばhoge( key, value1, value2 )というテーブルに対して、やりたいこととしては # # INSERT INTO hoge( key, value1, value2 )VALUES # (1, 10, 今の値), # (2, 今の値, 20) # ON DUPLICATE KEY UPDATE # value1 = VALUES(value1), # value2 = VALUES(value2) # # こんなイメージです。変えたいトコだけ変えて、他は現状維持してくれっていう。 # # '複数の行のそれぞれ狙った項目だけを一度に更新する。変えたいトコだけ変えて、他は現状維持。'(_変更値ならび) :- append(_,[[_key,_value11,_value22]|R],_変更値ならび), retract(hoge(_key,_value1,_value2)), 更新値の生成(_value11,_value22,_value1,_value2,X,Y), assertz(hoge(_key,X,Y)), R = [],!. '複数の行のそれぞれ狙った項目だけを一度に更新する。変えたいトコだけ変えて、他は現状維持。'(_). 更新値の生成(A,B,A,D,A,B) :- !. 更新値の生成(A,B,C,B,A,B) :- !. 更新値の生成(A,B,C,D,C,D) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/753 # # ../test/read.cgi/db/1274791771/4のような状況で、 # よくある質問1 # # (問) # ID | DATE     | DATA # --+----------+----- # 1 | 2007-11-11 | aaa # 2 | 2007-11-11 | bbb # 1 | 2007-11-10 | ccc # 3 | 2007-11-12 | ddd # 3 | 2007-11-11 | eee # 4 | 2007-11-10 | fff # 1 | 2007-11-12 | ggg # # # 各IDごとにランダムで2件抽出して、そのDATEを # 現在の日時に更新するにはどうすればよいでしょうか? # 各IDごとにランダムで2件抽出して、そのDATEを現在の日時に更新する :- findsetof(_ID,'TableName'(_ID,_DATE,_DATA),_IDならび), append(_,[_ID|R],_IDならび), findall([_ID,_DATE,_DATA],( 'TableName'(_ID,_DATE,_DATA)), L1), length(L1,_要素数), ランダムに2件抽出して(_要素数,L1,L2), 現在の日時に更新する(L2), R = []. ランダムに2件抽出して(0,[],[]) :- !. ランダムに2件抽出して(1,LL,LL) :- !. ランダムに2件抽出して(_要素数,L1,[_1,_2]) :- Nth1 is (random mod _要素数) + 1, list_nth(Nth1,L1,_1), repeat, Nth2 is (random mod _要素数) + 1, \+(Nth1 = Nth2), list_nth(Nth2,L1,_2),!. 現在の日時に更新する([[_ID,_DATE,_DATA]|R1]) :- 現在の日時(_現在の日時), findall([_ID,_DATE2,_DATA2], retract('TableName'(_ID,_DATE2,_DATA2)), L1), 現在の日時に更新する(_現在の日時,[[_ID,_DATE,_DATA]|R1],L1). 現在の日時に更新する(_現在の日時,[],[]) :- !. 現在の日時に更新する(_現在の日時,[],L) :- append(_,[[_ID,_DATE,_DATA]|R],L), assertz('TableName'(_ID,_DATE,_DATA)), R = [],!. 現在の日時に更新する(_現在の日時,[[_ID,_DATE,_DATA]|R1],[[_ID,_DATE,_DATA]|R2]) :- assertz('TableName'(_ID,_現在の日時,_DATA)), 現在の日時に更新する(_現在の日時,R1,R2),!. 現在の日時に更新する(_現在の日時,[[_ID,_DATE,_DATA]|R1],[[_ID,_DATE2,_DATA1]|R2]) :- assertz('TableName'(_ID,_DATE2,_DATA2)), 現在の日時に更新する(_現在の日時,[[_ID,_DATE,_DATA]|R1],R2),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/471 # # 【質問テンプレ】 # ・DBMS名とバージョン: SQLite 3 # ・テーブルデータ:長いため下記に記載 # ・欲しい結果:RSSリーダ(brief)のデータ(*.sqlite)から特定の記事データを削除したいです。 # ・説明:長いため下記に記載 # # ●テーブルデータ # ======================================================================================================================= # ■entries #  | id | feedID | primaryHash | secondaryHash | providerID | entryURL | date | read | updated | starred | deleted | bookmarkID | # ----------------------------------------------------------------------------------------------------------------------- # ■entries_text #  | title | content | authors | tags | # ----------------------------------------------------------------------------------------------------------------------- # ■entries_text_content #  | docid | c0title | c1content | c2authors | c3tags | # ----------------------------------------------------------------------------------------------------------------------- # ■sqlite_sequence #  | name | seq | # ======================================================================================================================= # # 1.【entries】テーブルの[deleted]フィールドが「 2 」の場合に、そのレコードを削除。 # # 2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した #   [id]フィールドと同じ値のレコードも削除。 # # 3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と #   同じレコード番号のレコードを削除。 ※idフィールドがない為 # # 4.その後、下記のフィールドの値を、1・2・3〜とリナンバリングしたい。 #   【entries】テーブルの[id]フィールド #   【entries_text_content】テーブルの[docid]フィールド # # 5.そして、1.2.3.の三つのテーブルのレコード数がどれも同じ数だけあるか確認。 # # 6.最後に、【sqlite_sequence】テーブルの[seq]フィールドに5.で確認したレコード数を #   設定したい。 # # お手数ですが、以上よろしくお願いします。 # # '1.【entries】テーブルの[deleted]フィールドが「 2 」の場合に、そのレコードを削除' :- findsetof(_id,( entries(_id,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID)), _deleted = '2'), L1), retract_all(entries(_id,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,'2',_bookmarkID)), findsetof(_docid,( member(_id,L1), entries_text_contents(_docid,_c0title,_c1content,_c2authors,_c3tags)), _docid = _id), L2), '2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した[id]フィールドと同じ値のレコードも削除。'(L2), '3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と同じレコード番号のレコードを削除。'(L1),!. '2.同時に、【entries_text_content】テーブルの[docid]フィールドが、1.で削除した[id]フィールドと同じ値のレコードも削除。'(L2) :- member(_docid,L2), retract_all(entries_text_contents(_docid,_c0title,_c1content,_c2authors,_c3tags)),!. '3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と同じレコード番号のレコードを削除。'(L1) :- append(_,[Nth|R],L1), 節の定義位置指定による節の削除(L2,Nth), R = [],!. '3.更に同時に、【entries_textテーブル】から、1.で削除した[idフィールド]の値(数字)と同じレコード番号のレコードを削除。'(_). 節の定義位置指定による節の削除(L2,Nth) :- findall((Head :- Body),( clause(entries_text(_title,_content,_authors,_tags),Head,Body)), L2), list_nth(Nth,L2,P), retract(P),!. '4.その後、下記のフィールドの値を、1・2・3〜とリナンバリングしたい。 【entries】テーブルの[id]フィールド 【entries_text_content】テーブルの[docid]フィールド' :- findall(entries(_id,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID),( retract(entries(_id,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID))), L1), append(L01,[entries(_,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID)|R1],L1), length([_|L0],Nth1), assertz(entries(Nth1,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID)), R1 = [], findall(entries_text_contents(_,_c0title,_c1content,_c2authors,_c3tags),( retract(entries_text_contents(_docid,_c0title,_c1content,_c2authors,_c3tags))), L2), append(L02,[entries_text_contents(_,_c0title,_c1content,_c2authors,_c3tags)|R2],L2), length([_|L02],Nth2), assertz(entries_text_contents(Nth2,_c0title,_c1content,_c2authors,_c3tags)), R2 = [],!. '5.そして、1.2.3.の三つのテーブルのレコード数がどれも同じ数だけあるか確認。'(Count) :- count(entries(_id,_feedID,_primaryHash,_secondaryHash,_providerID,_entryURL,_date,_read,_updated,_starred,_deleted,_bookmarkID),Count), count(entries_text_contents(_docid,_c0title,_c1content,_c2authors,_c3tags),Count), count(entries_text(_title,_content,_authors,_tags),Count). '6.最後に、【sqlite_sequence】テーブルの[seq]フィールドに5.で確認したレコード数を設定したい。'(Count) :- retract(sqlite_sequence(_name,_seq)), assertz(sqlite_sequence(_name,Count),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1291471791/670 # # [1]授業単元:プログラミング演習 # [2]問題文 # 料理のデータベースを作成し、複数のデータの中からカロリーが最大と最小の料理の全データを出力するプログラムを作成せよ # # [3] # [3.1]Windows # [3.2]Visual Studio 2010 # [3.3]C # [4]12/20 # [5]各料理のデータは「番号、名前、カロリー」 #   料理とカロリーの値は適当でも可(ラーメン 10kcalとか) # # よろしくお願いします # # 食品のカロリー('カップ麺(ラーメン)',448). 食品のカロリー('クロワッサン',448). 食品のカロリー('インスタントラーメン',445). 食品のカロリー('カップ焼きそば',436). 食品のカロリー('デニッシュパン',396). 食品のカロリー('焼きふ',385). 食品のカロリー('コーンフレーク',381). 食品のカロリー('オートミール',380). 食品のカロリー('スパゲティ(乾麺)',378). 食品のカロリー('マカロニ(乾麺)',378). 食品のカロリー('ビーフン(乾麺)',377). 食品のカロリー('パン粉',373). 食品のカロリー('白玉粉',369). 食品のカロリー('小麦粉(薄力粉)',368). 食品のカロリー('小麦粉(中力粉)',368). 食品のカロリー('小麦粉(強力粉)',366). 食品のカロリー('コーンフラワー',363). 食品のカロリー('コーンミール',363). 食品のカロリー('上新粉',362). 食品のカロリー('はと麦',360). 食品のカロリー('アマランサス',358). 食品のカロリー('そうめん(乾)',356). 食品のカロリー('コーングリッツ',355). 食品のカロリー('とうもろこし(玄穀)',350). 食品のカロリー('てんぷら粉',349). 食品のカロリー('大麦(押麦)',340). 食品のカロリー('ロールパン',316). 食品のカロリー('チョココルネ',308). 食品のカロリー('クリームパン',305). 食品のカロリー('しゅうまいの皮',295). 食品のカロリー('春巻の皮',295). 食品のカロリー('餃子の皮',291). 食品のカロリー('あんまん',281). 食品のカロリー('あんぱん',280). 食品のカロリー('フランスパン',279). 食品のカロリー('ぶどうパン',269). 食品のカロリー('ピザクラスト',268). 食品のカロリー('コッペパン',265). 食品のカロリー('食パン',264). 食品のカロリー('ライ麦パン',264). 食品のカロリー('ナン',262). 食品のカロリー('ホットケーキ',261). 食品のカロリー('肉まん',251). 食品のカロリー('もち',235). 食品のカロリー('イングリッシュマフィン',228). 食品のカロリー('中華めん(蒸し)',198). 食品のカロリー('おこわ(赤飯)',189). 食品のカロリー('ごはん(精白米)',168). 食品のカロリー('ごはん(七分つき米)',168). 食品のカロリー('ごはん(はいが精米)',167). 食品のカロリー('ごはん(玄米)',165). 食品のカロリー('中華めん(ゆで)',149). 食品のカロリー('そば(ゆで)',132). 食品のカロリー('うどん(ゆで)',105). 食品のカロリー('フライドポテト',388). 食品のカロリー('マッシュポテト(乾)',357). 食品のカロリー('タピオカ(乾)',351). 食品のカロリー('さつまいも',163). 食品のカロリー('くずきり(ゆで)',135). 食品のカロリー('やまといも',123). 食品のカロリー('じゃがいも',73). 食品のカロリー('ながいも',65). 食品のカロリー('さといも',59). 食品のカロリー('しらたき',6). 食品のカロリー('こんにゃく',5). 食品のカロリー('凍り豆腐(乾)',529). 食品のカロリー('フライビーンズ',472). 食品のカロリー('きな粉',437). 食品のカロリー('ひよこ豆フライ',419). 食品のカロリー('だいず(乾)',417). 食品のカロリー('油揚げ',386). 食品のカロリー('えんどう豆(塩豆)',364). 食品のカロリー('はるさめ(緑豆・乾)',345). 食品のカロリー('はるさめ(芋・乾)',342). 食品のカロリー('あずき(乾)',339). 食品のカロリー('金山寺みそ',256). 食品のカロリー('おたふく豆',251). 食品のカロリー('豆きんとん',249). 食品のカロリー('つぶしあん',244). 食品のカロリー('うずら豆',237). 食品のカロリー('ゆば(生)',231). 食品のカロリー('がんもどき',228). 食品のカロリー('納豆',200). 食品のカロリー('納豆(ひきわり)',194). 食品のカロリー('だいず(ゆで)',180). 食品のカロリー('ひよこ豆(ゆで)',171). 食品のカロリー('こしあん',155). 食品のカロリー('厚揚げ/生揚げ',150). 食品のカロリー('えんどう豆(ゆで)',148). 食品のカロリー('いんげん豆(ゆで)',143). 食品のカロリー('紅花いんげん(ゆで)',121). 食品のカロリー('おから',89). 食品のカロリー('豆腐(焼き)',88). 食品のカロリー('豆腐(木綿)',72). 食品のカロリー('豆腐(絹ごし)',56). 食品のカロリー('豆乳',46). 食品のカロリー('マカダミアナッツ',720). 食品のカロリー('松の実',690). 食品のカロリー('くるみ',674). 食品のカロリー('ピスタチオ',615). 食品のカロリー('アーモンド',606). 食品のカロリー('ごま',599). 食品のカロリー('バターピーナッツ',592). 食品のカロリー('らっかせい',585). 食品のカロリー('カシューナッツ',576). 食品のカロリー('くり(甘露煮)',238). 食品のカロリー('くり(中国ぐり)',225). 食品のカロリー('くり(日本ぐり)',167). 食品のカロリー('ぎんなん',166). 食品のカロリー('干ししいたけ(乾)',182). 食品のカロリー('きくらげ(乾)',167). 食品のカロリー('エリンギ',24). 食品のカロリー('まつたけ',23). 食品のカロリー('えのきたけ',22). 食品のカロリー('しいたけ',18). 食品のカロリー('しめじ',18). 食品のカロリー('まいたけ',16). 食品のカロリー('マッシュルーム',16). 食品のカロリー('なめこ',14). 食品のカロリー('マッシュルーム(缶)',14). 食品のカロリー('なめこ(缶)',9). 食品のカロリー('あんこうのきも',445). 食品のカロリー('たたみいわし',372). 食品のカロリー('いわし(油漬)',359). 食品のカロリー('かつおぶし',356). 食品のカロリー('まぐろ(脂身)',344). 食品のカロリー('ふかひれ',342). 食品のカロリー('しめさば',339). 食品のカロリー('いわし(みりん干)',332). 食品のカロリー('煮干し',332). 食品のカロリー('さんま',310). 食品のカロリー('うなぎ(かば焼)',293). 食品のカロリー('たら(でんぶ)',278). 食品のカロリー('ツナ缶(油漬)',267). 食品のカロリー('たちうお',266). 食品のカロリー('さんま(開き)',261). 食品のカロリー('ぶり',257). 食品のカロリー('めざし',257). 食品のカロリー('はまち(生)',256). 食品のカロリー('身欠きにしん',246). 食品のカロリー('いわし(焼き)',244). 食品のカロリー('たい(焼)',226). 食品のカロリー('あじ(干物)',220). 食品のカロリー('ぎんだら',220). 食品のカロリー('いわし(生)',217). 食品のカロリー('にしん',216). 食品のカロリー('さば',202). 食品のカロリー('塩さけ',199). 食品のカロリー('あなご',194). 食品のカロリー('たい(生)',194). 食品のカロリー('いわし(丸干)',193). 食品のカロリー('さば(水煮缶)',190). 食品のカロリー('あゆ(焼)',177). 食品のカロリー('さわら',177). 食品のカロリー('ししゃも',177). 食品のカロリー('むつ',173). 食品のカロリー('あじ(焼)',164). 食品のカロリー('かれい(子持ち)',162). 食品のカロリー('スモークサーモン',161). 食品のカロリー('きんめだい',160). 食品のカロリー('さけ(生)',154). 食品のカロリー('かます(焼)',145). 食品のカロリー('ほっけ(開き)',142). 食品のカロリー('かじき',141). 食品のカロリー('いさき',127). 食品のカロリー('にじます',127). 食品のカロリー('いかなご',125). 食品のカロリー('まぐろ(赤身)',125). 食品のカロリー('ひらめ',124). 食品のカロリー('すずき',123). 食品のカロリー('あじ(生)',121). 食品のカロリー('うなぎ(きも)',118). 食品のカロリー('かれい(干し)',117). 食品のカロリー('ほっけ(生)',115). 食品のカロリー('かつお',114). 食品のカロリー('しらす干し',113). 食品のカロリー('はたはた',113). 食品のカロリー('めばる',109). 食品のカロリー('かれい',95). 食品のカロリー('さより',95). 食品のカロリー('きす',85). 食品のカロリー('ふぐ',85). 食品のカロリー('かわはぎ',80). 食品のカロリー('たら(生)',79). 食品のカロリー('しらうお',77). 食品のカロリー('わかさぎ',77). 食品のカロリー('ツナ缶(水煮)',71). 食品のカロリー('たら(塩)',65). 食品のカロリー('あんこう',58). 食品のカロリー('するめ',334). 食品のカロリー('わかさぎの佃煮',317). 食品のカロリー('すじこ',282). 食品のカロリー('いかなごの佃煮',282). 食品のカロリー('いくら',272). 食品のカロリー('えびの佃煮',244). 食品のカロリー('かつお節の佃煮',237). 食品のカロリー('干しえび',232). 食品のカロリー('あさりの佃煮',225). 食品のカロリー('はまぐりの佃煮',219). 食品のカロリー('粒うに',183). 食品のカロリー('たらこ',170). 食品のカロリー('魚肉ソーセージ',161). 食品のカロリー('さつま揚げ',139). 食品のカロリー('めんたいこ',126). 食品のカロリー('ちくわ',121). 食品のカロリー('うに',120). 食品のカロリー('いか(焼)',117). 食品のカロリー('いかの塩辛',117). 食品のカロリー('つみれ',113). 食品のカロリー('たいらがい',100). 食品のカロリー('しゃこ',98). 食品のカロリー('車えび',97). 食品のカロリー('ほたて(貝柱)',97). 食品のカロリー('大正えび',95). 食品のカロリー('かまぼこ',95). 食品のカロリー('はんぺん',94). 食品のカロリー('伊勢えび',92). 食品のカロリー('桜えび',91). 食品のカロリー('かにかまぼこ',90). 食品のカロリー('数の子',89). 食品のカロリー('さざえ',89). 食品のカロリー('いか(生)',88). 食品のカロリー('甘えび',87). 食品のカロリー('ばいがい',87). 食品のカロリー('つぶがい',86). 食品のカロリー('とりがい',86). 食品のカロリー('ほたるいか',84). 食品のカロリー('芝えび',83). 食品のカロリー('毛がに',83). 食品のカロリー('ブラックタイガー',82). 食品のカロリー('みる貝',82). 食品のカロリー('たらばがに',80). 食品のカロリー('なると',80). 食品のカロリー('たこ',76). 食品のカロリー('あわび',73). 食品のカロリー('かに缶',73). 食品のカロリー('ほっき貝',73). 食品のカロリー('ほたて(ひも付)',72). 食品のカロリー('ずわいがに',69). 食品のカロリー('あみの塩辛',65). 食品のカロリー('あおやぎ',61). 食品のカロリー('かき',60). 食品のカロリー('しじみ',51). 食品のカロリー('はまぐり',38). 食品のカロリー('あさり',30). 食品のカロリー('ほや',30). 食品のカロリー('くらげ',22). 食品のカロリー('牛ばら肉(和牛)',517). 食品のカロリー('フォアグラ',510). 食品のカロリー('牛サーロイン(和牛)',498). 食品のカロリー('サラミ',497). 食品のカロリー('牛リブロース(和牛)',468). 食品のカロリー('牛肩ロース(和牛)',411). 食品のカロリー('ベーコン',405). 食品のカロリー('たまご(卵黄)',387). 食品のカロリー('豚ばら肉',386). 食品のカロリー('レバーペースト',378). 食品のカロリー('牛ばら肉(輸入)',371). 食品のカロリー('牛ランプ(和牛)',347). 食品のカロリー('ウインナー',321). 食品のカロリー('ビーフジャーキー',315). 食品のカロリー('牛サーロイン(輸入)',298). 食品のカロリー('フランクフルト',298). 食品のカロリー('牛肉(小腸)',287). 食品のカロリー('牛肩肉(和牛)',286). 食品のカロリー('牛たん(舌)',269). 食品のカロリー('牛リブロース(輸入)',263). 食品のカロリー('豚ロース',263). 食品のカロリー('豚肩ロース',253). 食品のカロリー('生ハム',247). 食品のカロリー('牛もも肉(和牛)',246). 食品のカロリー('牛肩ロース(輸入)',240). 食品のカロリー('牛ランプ(輸入)',234). 食品のカロリー('豚足',230). 食品のカロリー('牛ひき肉',224). 食品のカロリー('マトン',224). 食品のカロリー('牛ひれ肉(和牛)',223). 食品のカロリー('豚ひき肉',221). 食品のカロリー('豚たん(舌)',221). 食品のカロリー('ピータン',214). 食品のカロリー('鶏手羽肉',211). 食品のカロリー('ベーコン(ロース)',211). 食品のカロリー('鶏はつ(心臓)',207). 食品のカロリー('コンビーフ缶',203). 食品のカロリー('鶏もも肉(皮付)',200). 食品のカロリー('ハム(ロース)',196). 食品のカロリー('ローストビーフ',196). 食品のカロリー('鶏むね肉(皮付)',191). 食品のカロリー('ショルダーベーコン',186). 食品のカロリー('豚もも肉',183). 食品のカロリー('牛もも肉(輸入)',182). 食品のカロリー('うずら卵(水煮缶)',182). 食品のカロリー('牛肩肉(輸入)',180). 食品のカロリー('うずら卵(生)',179). 食品のカロリー('焼豚',172). 食品のカロリー('鶏ひき肉',166). 食品のカロリー('ポーチドエッグ',164). 食品のカロリー('牛大腸',162). 食品のカロリー('たまご(生)',151). 食品のカロリー('たまご(ゆで)',151). 食品のカロリー('牛はつ(心臓)',142). 食品のカロリー('牛ひれ肉(輸入)',133). 食品のカロリー('牛レバー(肝臓)',132). 食品のカロリー('豚レバー(肝臓)',128). 食品のカロリー('かも',128). 食品のカロリー('子牛ばら肉',122). 食品のカロリー('ハム(ボンレス)',118). 食品のカロリー('鶏もも肉(皮なし)',116). 食品のカロリー('豚ひれ肉',115). 食品のカロリー('鶏レバー(肝臓)',111). 食品のカロリー('鶏むね肉(皮なし)',108). 食品のカロリー('鶏ささみ',105). 食品のカロリー('鶏砂ぎも',94). 食品のカロリー('たまご豆腐',79). 食品のカロリー('牛ミノ(胃)',62). 食品のカロリー('鶏軟骨',54). 食品のカロリー('たまご(卵白)',50). 食品のカロリー('焼きのり',188). 食品のカロリー('味付けのり',179). 食品のカロリー('あおのり(乾)',150). 食品のカロリー('ひじき(乾)',139). 食品のカロリー('こんぶ(乾)',138). 食品のカロリー('カットわかめ(乾)',138). 食品のカロリー('あおさ(乾)',130). 食品のカロリー('とろろこんぶ',117). 食品のカロリー('わかめ(素干し)',117). 食品のカロリー('塩昆布',110). 食品のカロリー('こんぶつくだ煮',84). 食品のカロリー('のりのつくだ煮',77). 食品のカロリー('めかぶわかめ',11). 食品のカロリー('塩蔵わかめ(塩抜)',11). 食品のカロリー('もずく',4). 食品のカロリー('かんてん',3). 食品のカロリー('ところてん',2). 食品のカロリー('コーヒーミルク(粉/植物性)',568). 食品のカロリー('コーヒーミルク(粉/乳脂肪)',518). 食品のカロリー('パルメザンチーズ',475). 食品のカロリー('生クリーム(乳脂肪)',433). 食品のカロリー('ホイップクリーム(乳脂肪)',422). 食品のカロリー('ホイップクリーム(植物性)',402). 食品のカロリー('生クリーム(植物性)',392). 食品のカロリー('脱脂粉乳(粉)',359). 食品のカロリー('チーズ(クリーム)',346). 食品のカロリー('プロセスチーズ',339). 食品のカロリー('加糖練乳',331). 食品のカロリー('カマンベールチーズ',310). 食品のカロリー('コーヒーミルク(液/植物性)',248). 食品のカロリー('アイスクリーム(ラクトアイス・普通脂肪)',224). 食品のカロリー('乳酸菌飲料(殺菌乳製品)',217). 食品のカロリー('アイスクリーム(高脂肪)',212). 食品のカロリー('コーヒーミルク(液/乳脂肪)',211). 食品のカロリー('アイスクリーム(普通脂肪)',180). 食品のカロリー('アイスクリーム(アイスミルク)',167). 食品のカロリー('アイスクリーム(ソフトクリーム)',146). 食品のカロリー('シャーベット',127). 食品のカロリー('アイスクリーム(ラクトアイス・低脂肪)',108). 食品のカロリー('カッテージチーズ',105). 食品のカロリー('牛乳(特濃)',73). 食品のカロリー('乳酸菌飲料(乳製品)',71). 食品のカロリー('牛乳(普通)',67). 食品のカロリー('ヨーグルト(脱脂/加糖)',67). 食品のカロリー('ヨーグルト(飲料)',65). 食品のカロリー('ヨーグルト(全脂/無糖)',62). 食品のカロリー('コーヒー牛乳',56). 食品のカロリー('牛乳(低脂肪乳)',46). 食品のカロリー('フルーツ牛乳',46). 食品のカロリー('牛乳(脱脂乳)',33). 料理中の遺失カロリー比率(カレー,5) :- !. 料理中の遺失カロリー比率(_料理名,10) :- sub_atom(_料理名,_,3,_,スープ),!. 料理中の遺失カロリー比率(_,0). レシピ(カエルのバターとブドウ酒の煮込み,皮を剥いだカエルの足,6,900 g). レシピ(カエルのバターとブドウ酒の煮込み,辛口の白ブドウ酒,6,200 cc). レシピ(カエルのバターとブドウ酒の煮込み,小麦粉,6,3 g). レシピ(カエルのバターとブドウ酒の煮込み,塩,6,少々). レシピ(カエルのバターとブドウ酒の煮込み,パセリのみじん切り,6,2-3 枚). レシピ(カエルのバターとブドウ酒の煮込み,レモン,6,1 個). レシピ(すずきの白ブドウ酒入り蒸し焼き,'海すずき(1.1kg)',6,1 尾). レシピ(すずきの白ブドウ酒入り蒸し焼き,塩,6,少量). レシピ(すずきの白ブドウ酒入り蒸し焼き,辛口白ブドウ酒,6,400 cc). レシピ(すずきの白ブドウ酒入り蒸し焼き,バター,6,25 g). 作り方(カエルのバターとブドウ酒の煮込み,1,'マリネのためにブドウ酒を使ってカエルの足を浸す'). 作り方(カエルのバターとブドウ酒の煮込み,2,'バターを深底のフライパンに溶かす'). 作り方(カエルのバターとブドウ酒の煮込み,3,'マリネからカエルの足を取り出したおく'). 作り方(カエルのバターとブドウ酒の煮込み,4,'フライパンにブドウ酒をそそぎ、バターとよく混ぜ合わせ、足を加える'). 作り方(カエルのバターとブドウ酒の煮込み,5,'ブドウ酒が半量煮つまるまで、中火で煮る'). 作り方(カエルのバターとブドウ酒の煮込み,6,'小麦粉、塩少々、パセリ、水 30ccを混ぜ合わせる'). 作り方(カエルのバターとブドウ酒の煮込み,7,'フライパンに入れて混ぜ合わせる'). 作り方(カエルのバターとブドウ酒の煮込み,8,'中火でさらに15分火を通し続ける'). 作り方(カエルのバターとブドウ酒の煮込み,9,'供する前に、カエルの足にレモン汁をふりかけて、供する'). 作り方(すずきの白ブドウ酒入り蒸し焼き,1,'皮に傷をつけないように下ごしらえする。魚はきざみ目をつけて内側に塩をする。'). 作り方(すずきの白ブドウ酒入り蒸し焼き,2,'鍋にブドウ酒、バター、塩少量を入れて魚を入れ、蓋をして中火のオープンで約20分間魚がやわらかくなるまで蒸し焼きにする。'). 作り方(すずきの白ブドウ酒入り蒸し焼き,3,'魚を皿に盛り魚の背中に2~3つの切り目をつけ、上から濾した煮汁をかけてすぐ供する。'). 材料の姿(生姜,N,個,_数量のグラム単位) :- _数量のグラム単位 is N * 30. 材料の姿('たまねぎ(中)',N,個,_数量のグラム単位) :- _数量のグラム単位 is N * 250. 材料の姿(_,A,_,A,_). 料理のデータベースを作成し、複数のデータの中からカロリーが最大と最小の料理の全データを出力するプログラムを作成せよ :- findsetof(_料理名,レシピ(_料理名,_,_),_料理名ならび), append(_,[_料理名|_],_料理名ならび), findall([_カロリー,_料理名], 料理のカロリー(_料理名,_カロリー), _カロリー・料理名ならび), max(_カロリー・料理名ならび,[_カロリーが最大の料理のカロリー,_カロリーが最大の料理名]), min(_カロリー・料理名ならび,[_カロリーが最小の料理のカロリー,_カロリーが最小の料理名]), 料理の全データを出力する(_カロリーが最大の料理名,_カロリーが最大の料理のカロリー), 料理の全データを出力する(_カロリーが最小の料理名,_カロリーが最小の料理のカロリー),!. 料理のカロリー(_料理名,_カロリー) :- findsum(_カロリー,( レシピ(_料理名,_材料,_数量,_), 材料の姿(_材料,_数量,_,_数量グラム単位), 食品のカロリー(_材料,_100gあたりのカロリー), _カロリー is _100gあたりのカロリー * _数量グラム単位 / 100), _カロリー合計), 料理中の遺失カロリー比率(_料理名,_遺失カロリー比率), _カロリー is _カロリー合計 * (100-_遺失カロリー比率) / 100. 料理の全データを出力する(_料理名,_カロリー) :- findall([_材料,_数量グラム単位],レシピ(材料,_料理名,_材料,_数量,_),_材料ならび), findall(_作り方,作り方(_料理名,_,_作り方),_作り方ならび), write_formatted('料理名 %t\nカロリー量 %t\n',[_料理名,カロリー]), 材料の表示(_材料・数量ならび), 作り方の表示(_作り方ならび),!. 材料の表示(_材料・数量ならび) :- write('材料,数量\n'), append(_,[[_材料,_数量グラム単位]|R],_材料・数量ならび), write_formatted('%t,%t\n',_材料,_数量グラム単位]), R = [],!. 作り方の表示(_作り方ならび) :- write('\n作り方\n\n'), append(L0,[_作り方|R],_作り方ならび), length([_|L0],_手順番号), write_formatted('%t ... %t\n',[_手順番号,_作り方]), R = [],!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/730 # # ・DBMS名とバージョン #  MySQL 5.1 # ・テーブルデータ #  記録ID(通し番号)、ユーザID、日時、金額、購入品目ID # ・欲しい結果 #  購入品目ID、日時(最新の1件)、金額(〃)  //ただしユーザID=A # # ・説明 #  ユーザID=Aの、購入品目IDごとに、最新の日時と金額を表示させたいです。 #  (購入品目IDが1〜10まであったら、10行の結果が返ってくるような) #  どこに副問合せを使っていいか分からず詰まりました。どなたかお願いします。 # # 'ユーザID=Aの、購入品目IDごとに、最新の日時と金額を表示させたいです。' :- 'ユーザIDを指定して、購入品目IDごとに、最新の日時と金額を表示'('A'). 'ユーザIDを指定して、購入品目IDごとに、最新の日時と金額を表示'(_ユーザID) :- findsetof(_購入品目ID, テーブルデータ(_記録ID,_ユーザID,_日時,_金額,_購入品目ID), L1), append(_,[_購入品目ID|R],L1), findmax([_日時,_その日の合計金額], findsum(_金額,( テーブルデータ(_記録ID,_ユーザID,_日時,_金額,_購入品目ID)), _その日の合計金額), [_日時,_その日の合計金額]), write_formatted('%t,%t,%t\n',[_ユーザID,_日時,_その日の金額]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/711 # # Oracleのソートだと数字→英字になっていまいますが # これをSQLで逆にソートする方法はありますか。 # # '英字-数字順整列'(L1,L2) :- L1 = [A|R], '英字-数字順整列'(A,R,L2). '英字-数字順整列'(_,[],[]) :- !. '英字-数字順整列'(A,R,L2) :- '英字-数字順整列の分割'(A,R_Aに等しいかより小さいならび,_Aより大きいならび), '英字-数字順整列'(_Aより小さいならび,_整列したAより小さいならび), '英字-数字順整列'(_Aより大きいならび,_整列したAより大きいならび), append(_整列したAより小さいならび,[A|_整列したAより大きいならび],L2). '英字-数字順整列の分割'(_文字1,[],[],[]) :- !. '英字-数字順整列の分割'(_文字1,[_文字2|R1],[_文字2|R2],R3) :- 'ソートの大小比較規則の変更'(@>=,_文字1,_文字2), '英字-数字順整列の分割'(_文字1,R1,R2,R3). '英字-数字順整列の分割'(_文字1,[_文字2|R1],R2,[_文字2|R3]) :- 'ソートの大小比較規則の変更'(@<,_文字1,_文字2), '英字-数字順整列の分割'(_文字1,R1,R2,R3). 'ソートの大小比較規則の変更'(@>,_文字1,_文字2) :- 数字(_文字1), 英字(_文字2),!. 'ソートの大小比較規則の変更'(@>,_文字1,_文字2) :- _文字1 @> _文字2,!. 'ソートの大小比較規則の変更'(@>=,_文字1,_文字2) :- 数字(_文字1), 英字(_文字2),!. 'ソートの大小比較規則の変更'(@>=,_文字,_文字) :- !. 'ソートの大小比較規則の変更'(@<,_文字1,_文字2) :- 数字(_文字2), 英字(_文字1),!. 'ソートの大小比較規則の変更'(@<,_文字1,_文字2) :- _文字1 @< _文字2,!. 'ソートの大小比較規則の変更'(@=<,_文字1,_文字2) :- 数字(_文字2), 英字(_文字1),!. 'ソートの大小比較規則の変更'(@=<,_文字,_文字) :- !. 'ソートの大小比較規則の変更'(=,_文字,_文字) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/696 # # 初歩的な質問ですみません。どうしても動かないので腹が立って質問します。 # 取引先テーブルから会社名の最後に株式会社とつく会社を抜き出すときはこれでいいんですよね。どうしても動きません。 # 使ってるソフトはhsqldbです # # SELECT 会社名 # FROM 取引先テーブル # WHERE 会社名 LIKE '%株式会社' # # 取引先テーブルから会社名の最後に株式会社とつく会社を抜き出す(_会社名) :- findall(_,テーブル定義(取引先テーブル,_,_),L), テーブル定義(取引先テーブル,Nth,会社名), P =.. [取引先テーブル|L], call(P), list_nth(Nth,L,_会社名), sub_atom(_会社名,_,4,0,'株式会社'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/669 # # MySql 5.1 です。 # select句の subquery で、カラムを2つ返したいのですが、 # これは不可能なのでしょうか? # 何か良い方法はないでしょうか? # # 同じ問い合わせを、2回書くのは なしということでお願いします。 # こんな感じで実現できたらベストです。 # # select # a.name , # b.date , # ( # select # c.foo_id, # c.bar_id # from # c # where # a.cond = c.cond # and b.date > c.date # order by c.date desc # limit 1 # ) # from # a, b # where # a.id = b.id # # # aTable # --------- # id,cond,name # # bTable # -------- # id,date # # cTable # ---------- # foo_id,bar_id,cond,date 'select句の subquery で、カラムを2つ返したい'(_name,_date,_foo_id,_bar_id) :- a(_id,_cond,_name), b(_id,_date), findmax([_date,_foo_id,_bar_id],( c(_foo_id,_bar_id,_cond,_c_date), _date > _c_date), [Max_date,_foo_id,_bar_id]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/650 # # SQLite3で # # 1 | aaa # 2 | bbb # 3 | ccc # 4 | ddd # 5 | eee # # というテーブルから「3 ccc」を削除した時に自動で # # 1 | aaa # 2 | bbb # 3 | ddd # 4 | eee # # みたいに修正する方法ってありますか? # 他のDBMSでの方法でも構わないので宜しくお願いします。 # '節が削除された時、連続したidを自動で振り直す'(_テーブル名,_削除された順idならび) :- '節が削除された時idを自動で振り直す'(_テーブル名,_削除された順idならび,0),!. '節が削除された時idを自動で振り直す'(_テーブル名,[_id1],Sub1) :- findall(_,テーブル構造(_テーブル名,_,_),L), 最終節のidを得る(_テーブル名,L,Max), テーブル構造の生成(_テーブル名,L,_id_d,_id_a,P,Q), _id1_1 is _id1 + 1, '_id1と_id2にの間の節のidを振り直す'(_id1_1,Max,id_d,P,_id_a,Q,Sub1),!. '節が削除された時idを自動で振り直す'(_テーブル名,[_id1,_id2|R],Sub1) :- findall(_,テーブル構造(_テーブル名,_,_),L), idを更新する節の現在のid範囲(_id1,_id2,_id_1,_id2_1), テーブル構造の生成(_テーブル名,L,_id_d,_id_a,P,Q), '_id1と_id2にの間の節のidを振り直す'(_id1_1,_id2_1,id_d,P,_id_a,Q,Sub1), Sub2 is Sub1 + 1, '節が削除された時idを自動で振り直す'(_テーブル名,[_id2|R],Sub2). 最終節のidを得る(_テーブル名,L,Max) :- L = [_id|R], P =.. [_テーブル名|L], findmax(_id,call(P),Max),!. '_id1と_id2にの間の節のidを振り直す'(_id1,_id2,_id_d,P,_id_a,Q,Sub1) :- for(_id1,N,_id2), retract(P), _id_a is _id_d - Sub1, assertz(Q), N = _id2,!. テーブル構造の生成(_テーブル名,L,_id_d,_id_a,P,Q) :- L = [_|R], P =.. [_テーブル名,_id_d|R], Q =.. [_テーブル名,_id_a|R],!. idを更新する節の現在のid範囲(_id1,_id2,_id_1,_id2_1) :- _id1_1 is _id1 + 1, _id2_1 is _id2 - 1,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/642 # # +---+------+----+ # | id|parent|name| # +---+------+----+ # | 1 | NULL |taro| # | 2 |  1 |jiro| # | 3 |  1 |sabu| # | 4 |  2 |siro| # | 5 | 3 |hana| # +---+------+----+ # # 上記のようなユーザーID(id)とその親情報(parent)のテーブルで、 # 指定したIDの子と孫の一覧を取得するにはどうすればいいですか? # 1の場合、jiro、sabu、siroを取得したいです。 # 子と孫の総数だけでもかまいません。 # # 親子(1,[],taro). 親子(2,1,jiro). 親子(3,1,sabu). 親子(4,2,siro). 親子(5,3,hana). 指定したIDの子と孫の取得(_指定したid,_子と孫ならび) :- findsetof(_id,親子(_id,_,_),L), append(_,[_指定したid|_],L), 孫ならびの取得(_指定したid,_孫ならび), 子ならびの取得(_指定したid,_子ならび), append(_子ならび,_孫ならび,_子と孫ならび). 孫ならびの取得(_id2,_孫ならび) :- findall(_name,( 親子(_id1,_id2,_), 親子(_id,_id1,_name)), _孫ならび),!. 子ならびの取得(_id2,_子ならび) :- findall(_name,親子(_id,_id2,_name),_子ならび),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/635 # # 宜しくお願いします。 # # ・DBMS名とバージョン # Oracle10g # # ・テーブルデータ # SALES # +------------+------+ # | 日時 | 数量 | # +------------+------+ # | 2010/03/01 | 1 | # | 2010/03/02 | 1 | # | 2010/03/23 | 2 | # | 2010/03/24 | 1 | # | 2010/04/05 | 5 | # | 2010/04/05 | 2 | # +------------+------+ # # ・欲しい結果 # テーブルから週毎(月曜基準)に合算した数量を取得したい。 # 但しデータがない週も0で表示したい。 # # ・説明 # 週毎に合算した数量は以下のSQLで取得できましたが、 # データがない週も表示する方法がわかりません。 # # SELECT NEXT_DAY(TO_DATE(日時,'yyyy/mm/dd'),2)-7 AS 日時, SUM(数量) # FROM SALES # GROUP BY NEXT_DAY(TO_DATE(日時,'yyyy/mm/dd'),2)-7; # # 宜しくお願い致します。 'テーブルから週毎(月曜基準)に合算した数量を取得したい。但しデータがない週も0で表示したい。'(_週区間下限,_週区間上限,_数量合計) :- 週グループを生成(_週区間ならび), 週区間ごとに数量を合計する(_週区間ならび,_週合計ならび), append(_,[[_週区間下限,_週区間上限,_数量合計]|R],_集合計ならび). 週グループを生成(_週区間ならび) :- findmin(_日時,'SALES'(_日時,_),_日付下限), findmax(_日時,'SALES'(_日時,_),_日付上限), 最も直前の月曜日(_日付下限,_日付下限の一), 最も直前の月曜日(_日付上限,_日付上限の一), findall([_月曜日,_直後の日曜日],( 週の切り取り(_日付下限の一,_月曜日,_日付上限の一), 直後の日曜日(_月曜日,_直後の日曜日)), _週区間ならび), length(_週区間ならび,Len),!. 週区間ごとに数量を合計する([],[]) :- !. 週区間ごとに数量を合計する([[_週区間下限,_週区間上限]|R1],[[_週区間下限,_週区間上限,_数量合計]|R2]) :- findsum(_数量,( 'SALES'(_日時,_数量),_数量合計), _日時 @>= _週区間下限, _日時 @=< _週区間上限), _数量合計), 週区間ごとに数量を合計する(R1,R2). 週の切り取り(_月曜日,_月曜日,_日付上限) :- _月曜日 @=< _日付上限. 週の切り取り(_月曜日の一,_月曜日,_日付上限) :- 直後の月曜日(_月曜日の一,_直後の月曜日), 週の切り取り(_直後の月曜日,_月曜日,_日付上限). % 以下のサイトは # 出典: http://hibari.2ch.net/test/read.cgi/db/1279635842/127 # select文で100行ぐらい結果が返されるとき、 # 途中の20行目あたりからのみ取得するようなSQL文は # 記述可能ですか? # 述語参照で100行ぐらい結果が返されるとき、途中のn行目からのみ取得する(_述語参照,_n行目,_何行目 :: _n行目の解以降の解) :- _述語参照 =.. [_述語|_引数ならび], findall(_引数ならび,_述語参照,_解ならび), n行目以降だけの解をえる(_n行目,_解ならび,_何行目,_n行目の解以降の解). n行目以降だけの解を得る(_n行目,_解ならび,_何行目,_n行目の解以降の解) :- append(_読み捨てまたは読み終わりならび,[_n行目の解以降の解|_],_解ならび), length(_読み捨てまたは読み終わりならび,_読み捨てまたは読み終わり要素数), _読み捨てまたは読み終わり要素数 >= _n行目 - 1, _何行目 is _読み捨てまたは読み終わり要素数 + 1. % 以下のサイトは # 出典: http://hibari.2ch.net/test/read.cgi/db/1279635842/127 # select文で100行ぐらい結果が返されるとき、 # 途中の20行目あたりからのみ取得するようなSQL文は # 記述可能ですか? # 述語参照で100行ぐらい結果が返されるとき、途中のn行目からのみ取得する(_述語参照,_n行目,_何番目 :: _解) :- _述語参照 =.. [_述語|_引数ならび], findall(_引数ならび,_述語参照,_解ならび), n番目以降だけの解をえる(_n行目,_解ならび,_何番目,_解). n番目以降だけの解をえる(_n,_解ならび,_何番目,_解) :- n番目以降だけの(_n,_解ならび,_n個目の解以降の解ならび), 解を得る(_n個目の解以降の解ならび,_何番目,_解). n番目以降だけの(_n,_解ならび,_n個目の解以降の解ならび) :- _n_1 is _n - 1, length(L0,_n_1), append(L0,_n個目の解以降の解ならび,_解ならび). 解を得る(_n個目の解以降の解ならび,_何番目,_解) :- append(L1,[_解|_],_n個目の解以降の解ならび), 解の位置はL1の長さより1多い(L1,_何番目). 解の位置はL1の長さより1多い(L1,_何番目) :- length(L1,Len), _何番目 is Len + 1. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/627 # # mysql 5.0 (windows 7)です # 下記のようなテーブルで # amountの合計の最も多いidを取得するsql文がわかりません… # # select id, sum(amount) as "total" from orders # group by id order by total desc limit 1; # # とすれば一応取得できたのですが、別の方法はないでしょうか # 初歩的な質問ですみません… # # +------+------+--------+ # | id | name | amount | # +------+------+--------+ # | 1 | C1 | 3 | # | 1 | C2 | 10 | # | 2 | C2 | 5 | # | 2 | C3 | 10 | # | 3 | C3 | 2 | # +------+------+--------+ # 'amountの合計の最も多いidを取得する'(_最もaumout合計が多いid) :- find_sum_max([_id,_値],orders(_id,_,_値),[_最もamount合計が多いid,_最大合計値]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % _合計値 は任意の変数として、利用者が設定する find_sum_max([_鍵,_値],P,_合計値,_合計値の条件,[_鍵,_最大合計値]) :- findall([_鍵,_値],( 単一(_鍵,P)), findsum(_値,P,_合計値)), L), findmax(_合計値,( append(_,[[_鍵,_合計値]|_],L), _合計値の条件), _最大合計値), append(_,[[_鍵,_最大合計値]|_],L). find_sum_min([_鍵,_値],P,_合計値,_合計値の条件,[_鍵,_最小合計値]) :- findall([_鍵,_値],( 単一(_鍵,P)), findsum(_値,P,_合計値)), L), findmin(_合計値,( append(_,[[_鍵,_合計値]|_],L), _合計値の条件), _最小合計値), append(_,[[_鍵,_最小合計値]|_],L). find_sum_max([_鍵,_値],P,[_鍵,_最大合計値]) :- findall([_鍵,_値],( 単一(_鍵,P)), findsum(_値,P,_合計値)), L), findmax(_合計値,append(_,[[_鍵,_合計値]|_],L),_最大合計値), append(_,[[_鍵,_最大合計値]|_],L). find_sum_min([_鍵,_値],P,[_鍵,_最小合計値]) :- findall([_鍵,_値],( 単一(_鍵,P)), findsum(_値,P,_合計値)), L), findmin(_合計値,append(_,[[_鍵,_合計値]|_],L),_最小合計値), append(_,[[_鍵,_最小合計値]|_],L). 単一(A,P) :- findsetof(A,P,L),!, append(_,[A|_],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/607 # # MySQLServer5.1(WinXP)です。 # # 下記のような3種類のテーブルがあります。 # これを集計して、指定したユーザーの指定月のアクセス日時と売上げ金額を表にしたいと思っています。 # # こんな感じに。 # # +--+--------+----------+-------+-----+ # | id | username| date   | access | sales | # +--+--------+----------+-------+-----+ # | 1 | admin | 2010-11-13 |   2 | 5000 | # | 1 | admin | 2010-11-14 |   2 | 5000 | # | 1 | admin | 2010-11-15 |  1 | 20000 | # +--+--------+----------+-------+-----+ # # # SELECT u.id AS id, u.username, DATE(a.created_at) AS date, COUNT(*) AS access, SUM(s.amount) AS sales # FROM sf_guard_user u INNER JOIN sales s ON u.username = s.user_id LEFT JOIN access_log a ON u.username = a.user_id # WHERE (u.username = 'admin' AND a.created_at > '2010-11-01 00:00:00' AND a.created_at < '2010-11-30 23:59:59') GROUP BY date ORDER BY a.created_at; # とやってみたのですがダメでした;; # # # ■ユーザー情報テーブル # mysql> select id,username from user; # +--+---------+ # | id | username | # +--+---------+ # | 1 | admin   | # +--+---------+ # # ■アクセスログテーブル # mysql> select * from access_log; # +--+-------+--------+------------------+ # | id | user_id | ip     | created_at      | # +--+-------+--------+------------------+ # | 1 | admin  | 127.0.0.1 | 2010-11-13 21:56:54 | # | 2 | admin  | 127.0.0.1 | 2010-11-13 21:56:54 | # | 3 | admin  | 127.0.0.1 | 2010-11-14 21:56:54 | # | 4 | admin  | 127.0.0.1 | 2010-11-14 21:56:54 | # | 5 | admin  | 127.0.0.1 | 2010-11-15 21:56:54 | # +--+-------+--------+------------------+ # # ■売上げ金額テーブル # mysql> select * from sales; # +--+-------+------+------------------+ # | id | user_id | amount| created_at      | # +--+-------+------+------------------+ # | 1 | admin  |  5000 | 2010-11-13 21:56:54 | # | 2 | admin  |  5000 | 2010-11-14 21:56:54 | # | 3 | admin  |  5000 | 2010-11-15 21:56:54 | # | 4 | admin  |  5000 | 2010-11-15 21:56:54 | # +--+-------+------+------------------+ # # '下記のような3種類のテーブルがあります。これを集計して、指定したユーザーの指定月のアクセス日時と売上げ金額を表にしたいと思っています。'(_username) :- user(_id,_username), アクセスログテーブル_date(_username,_アクセスログ_dateならび), 売上げ金額テーブル_date(_username,_売上金額テーブル_dateならび), 共通部分(_アクセスログ_dateならび,_売上金額テーブル_dateならび,_date_共通部分), write('+--+-------+--------+------------------+ \n'), write('| id | user_id | amount| created_at      | \n'), write('+--+-------+------+------------------+ \n), append(L0,[_date|R],_date_共通部分), length(L0,Len0), _id is Len0 + 1, count(( access_log(_,_user_id,_ip,_create_at), sub_atom(_create_at,0,10,_,_create_at)), _access), findsum(_amount,( sales(_,_user_id,_amount,_create_at), sub_atom(_create_at,0,10,_,_create_at)), _sales), write_formatted('| %t | %t | %t | %t | %t |\n',[_id,_username,_date,_access,_sales]), R = [], write('+--+-------+------+------------------+\n'). アクセスログテーブル_date(_user_id,_dateならび) :- findsetof(_date,( access_log(_,_user_id,_,_created_at), sub_atom(_create_at,0,10,_,_date)), _dateならび). 売上げ金額テーブル_date(_user_id,_dateならび) :- findsetof(_date,( sales(_,_user_id,_amount,_created_at), sub_atom(_create_at,0,10,_,_date)), _dateならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/592 # # ええと、たとえば名前の苗字と住所の一部が分かってるときとかに検索したい時に # 神奈川在住の千葉さんだとして # # 名前から「千葉」、住所から「神奈川」とやらなくても # 複数のフィールドに「千葉、神奈川」がある人を見つけたいんです # 全文検索みたいな感じでしょうか # この例だと、千葉と神奈川をひっくり返して試せばいいだけですが # 本当は項目がもっと多いので # 複数のフィールドに一つのキーワード検索が可能である組(_テーブル名,_検索語,_組) :- findall(_,テーブル定義(_テーブル名,_,_),_組), P =.. [_テーブル名|_組]), call(P), concat_atom(_組,S), count(sub_atom(S,_,_,_,_検索語),Count), Count > 1. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/596 # # ・SQL Server 2008 # # 行 | 品名 | 個数 # --+-----+---- # 1 | 商品1 |  2 # 2 | 商品2 |  1 # 3 | 商品3 |  1 # 4 | 商品4 |  5 # # 上記のようなテーブルがあるんだけど、下記のように個数の累計を取得したいです # # 行 | 品名 | 個数 | 累計 # --+-----+---- +----- # 1 | 商品1 |  2  |  2 # 2 | 商品2 |  1  |  3 # 3 | 商品3 |  1  |  4 # 4 | 商品4 |  5  |  9 # # SUM使ってCASEでわけて合計すればよさげだけどうまく書けません # 教えてください # 個数の累計を取得する :- findall([_行,_品名,_個数],テーブル(_行,_品名,_個数),LL), write('行 | 品名 | 個数 | 累計\n'), write('--+-----+---- +----- \n'), 個数の累計を取得する(LL,0). 個数の累計を取得する([],_) :- !. 個数の累計を取得する([[_行,_品名,_個数]|R],_累計1) :- _累計 is _累計1 + _個数, write_formatted('%t | %t | %d | %d\n',[_行,_品名,_個数,_累計]), 個数の累計を取得する(R,_累計). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/590 # # 似たような質問なんですが # すべてのカラムに対してそれぞれではなく、複数まとめて検索したい場合は # どうするのでしょうか? # # イメージ的には複数のフィールドを取り出してくっつけて1文にして # それにXXX and YYY で検索する感じです # # 実はすごく簡単なような気もするんですが # 全部取り出してくっつけたものを、この検索のためのフィールドに入れておく # くらいしか思いつきません # # name address   tel   ・・・・ # ------------------------------ # itouYYY XXXZZZ 0123-4567 # itouZZZ YYYYFF 1234-0123 # hanaXXX LLLZZZ XXXX-XXXX # # で、(itouYYY XXXZZZ 0123-4567 …)が欲しい # # # :- op(750,xfx,and). 'すべてのカラムに対してそれぞれではなく、複数まとめて検索したい場合は'(_テーブル名,_検索文字列1 and _検索文字列2,L) :- findall(_,テーブル定義(_テーブル名,_id,_属性名),L), P =.. [_テーブル名|L], call(P), concat_atom(L,S), sub_atom(S,_,_,_,_検索文字列1), sub_atom(S,_,_,_,_検索文字列2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/587 # # 下のようなカラムがあるのですが、value1〜3に1回でも出てくる値を # 重複なく取得したいのですが、うまくSQLで書けるものでしょうか。 # key, value1, valu2, value3(value1〜3は任意の文字列) # # たとえば、3個のレコード # 1, AAA, BBB, CCC # 2, DDD, AAA, CCC # 3, EEE, FFF, AAA # があった場合、AAA, BBB, CCC, DDD, EEE, FFFを出力したいです。 # # % table(_key,_value1,_value2,_value3). table(1,'AAA','BBB','CCC'). table(2,'DDD','AAA','CCC'). table(3,'EEE','FFF','AAA'). 'tableのvalue1〜3に1回でも出てくる値を重複なく取得したい' :- 'tableのvalue1〜3に1回でも出てくる値を重複なく取得したい'(L), append(_,[X|R],L), write_formatted('%t\n',[X]), R = []. 'tableのvalue1〜3に1回でも出てくる値を重複なく取得したい'(L) :- findsetof(_value,( table(_,_value1,_value2,_value3), append(_,[_value|_],[_value1,_value2,_value3])), L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/582 # # すいません、全フィールドに(2語の検索語でANDもしくはORで)検索をかけたい場合 # どうかくのでしょうか?mysql でPHP で書いています。 # (2語をANDで検索したい場合) # SELECT * FROM table WHERE name LIKE '%$word1%' AND name LIKE '%$word2%' # SELECT * FROM table WHERE address LIKE '%$word1%' AND address LIKE '%$word2%' # SELECT * FROM table WHERE tel LIKE '%$word1%' AND tel LIKE '%$word2%' #            ・ #            ・ # # みたいに全フィールド分並べるとダブりがあるし # SELECT * FROM table WHERE * LIKE '%$word1%' AND * LIKE '%$word2%' # とやったら怒られました # '全フィールドに(2文字列の検索文字列でANDもしくはORで)検索をかけたい場合どうかくのでしょうか?'(_検索文字列_1,_検索文字列_2,L) :- findall(_,テーブル定義(table,_id,_フィールド名),L), P =.. [_テーブル名|L], call(P), 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,_ANDかOR,L). 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,_,[]) :- !. 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,'AND',[_値|R]) :- sub_atom(_値,_,_,_,_検索文字列_1), sub_atom(_値,_,_,_,_検索文字列_2), 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,'AND',R). 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,'OR',[_値|R]) :- ( sub_atom(_値,_,_,_,_検索文字列_1); sub_atom(_値,_,_,_,_検索文字列_2)), 全フィールドに対して検索する(_検索文字列_1,_検索文字列_2,'AND',R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/572 # # sqlite3です、PHPを使ってやりたいんですが、 # # データにある、ある項目が引用されたとき、 # そのデータにあるcntというカラムにカウンターみたいなのを付けたいんですが # 何か良い方法はありますか? # http://ime.nu/oku.edu.mie-u.ac.jp/~okumura/php/counter-sqlite.php # それっぽいのがあったんですけど 複数のcnt[カラム]ごとに取得したいんですよね # カウンタ付き参照(P) :- P =.. [_テーブル名,_id|L], 参照位置ならび(2,L,_条件項位置ならび,_変数位置ならび), call(P), 条件項カウンタの更新(_テーブル名,_id,_条件項位置ならび), 変数項カウンタの更新(_テーブル名,_id,_変数位置ならび). 参照位置ならび(_,[],[],[]) :- !. 参照位置ならび(N,[A|R1],[N|R2],R3) :- \+(var(A)), N2 is N + 1, 参照位置ならび(N2,R1,R2,R3). 参照位置ならび(N,[V|R1],R2,[N|R3]) :- var(V), N2 is N + 1, 参照位置ならび(N2,R1,R2,R3). 条件項カウンタの更新(_テーブル名,_id,_条件項位置ならび) :- append(_,[_位置|R],_条件項位置ならび), 条件項カウンタの更新(_テーブル名,_id,_位置), R = []. 条件項カウンタの更新(_テーブル名,_id,_位置) :- retract(条件項カウンタ(_テーブル名,_id,_位置,N)), N2 is N + 1, asserta(条件項カウンタ(_テーブル名,_id,_位置,N2)). 条件項カウンタの更新(_テーブル名,_id,_位置) :- \+(条件項カウンタ(_テーブル名,_id,_位置,_)), asserta(条件項カウンタ(_テーブル名,_id,_位置,1)). 変数項カウンタの更新(_テーブル名,_id,_位置) :- retract(変数による参照項カウンタ(_テーブル名,_id,_位置,N)), N2 is N + 1, asserta(変数による参照項カウンタ(_テーブル名,_id,_位置,N2)). 変数項カウンタの更新(_テーブル名,_id,_位置) :- \+(変数項カウンタ(_テーブル名,_id,_位置,_)), asserta(変数による参照項カウンタ(_テーブル名,_id,_位置,1)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/571 # # SQLite3 です。 # # a-1 b-2 a-2 b-10 a-10 b-9 # が # a-1 a-2 a-10 b-2 b-9 b-10 # になるようにソートする方法はありますか? # ハイフンの後ろは必ず数値なんですが、 # a や b の部分の文字数は不定です。 # # 'a-1 b-2 a-2 b-10 a-10 b-9 が a-1 a-2 a-10 b-2 b-9 b-10 になるようにソートする'(L1,L2) :- findall(_鍵項目,テーブル(_鍵項目),L1), sort(L1,L2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 'a-1 b-2 a-2 b-10 a-10 b-9 が a-1 a-2 a-10 b-2 b-9 b-10 になるようにソートする'(L1,L2) :- sort(L1,L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/567 # # 文字が詰まって見えるので再投稿します。 # Olacleで、以下の<Table1>と<Table2>から<Table3>を作り出すSQLは # どのように記述できますでしょうか?ご教示願います。 # # <Table1> # 製品コード   部品コード # XXXX      A # YYYY      B # ZZZZ      C1 # # <Table2> # 部品コード   部品 # A        A1 # A        A2 # B        B1 # B        B2 # # <Table3> # 製品コード   部品 # XXXX      A1 # XXXX      A2 # YYYY      B1 # YYYY      B2 # ZZZZ      C1 # # 'Table1とTable2からTable3を作り出す' :- 'Table1'(_製品コード,_部品コード), 'Table2に対応する部品がなければ部品コードを、あれば部品を戻す'(_部品コード,_部品), assertz('Table3'(_製品コード,_部品)), fail. 'Table1とTable2からTable3を作り出す'. 'Table2に対応する部品がなければ部品コードを、あれば部品を戻す'(_部品コード,_部品コード) :- \+'Table2(_部品コード,_),!. 'Table2に対応する部品がなければ部品コードを、あれば部品を戻す'(_部品コード,_部品) :- 'Table2'(_部品コード,_部品1), 'Table2に対応する部品がなければ部品コードを、あれば部品を戻す'(_部品1,_部品). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/562 # # 検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせたいみたいなことは可能ですか? # 例えば「にしむらひろゆき」という文字列にたいしてLIKEで'%ひろゆき%'はHITしますが、 # 「2ちゃんねる元管理人にしむらひろゆきさん」というキーワードで # この「にしむらひろゆき」にSQLだけでHITさせることは可能でしょうか? # # % % 対象文字列の長さが検索文字列と同じであるか、あるいは短い場合。 検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせる(_検索キーワード,_対象文字列,_検索された文字列より前の文字列,_検索された文字列,_検索された文字列より後の文字列) :- sub_atom(_検索キーワード,_開始点,副文字列長,_残り文字列長,_対象文字列), sub_atom(_対象文字列,0,_開始点,_,_検索された文字列より前の文字列), _残り文字列の開始点 is _開始点 + _副文字列長, sub_atom(_対象文字列,_残り文字列の開始点,_残り文字列長,_,_検索された文字列より後の文字列). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % 対象文字列と検索文字列のそれぞれの一部が一致すればよいとする場合。 検索したい文字列より検索キーワードが多いけどだいたいあってるからHITさせる(_検索キーワード,_対象文字列,_検索された文字列より前の文字列,_検索された文字列,_検索された文字列より後の文字列) :- 最長一致副文字列(_検索キーワード,_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列), sub_atom(_対象文字列,0,_開始点,_,_検索された文字列より前の文字列), _残り文字列の開始点 is _開始点 + _副文字列長, sub_atom(_対象文字列,_残り文字列の開始点,_残り文字列長,_,_検索された文字列より後の文字列). 最長一致副文字列(_検索キーワード,_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列) :- findall([_副文字列長,_残り文字列長,_開始点,_副文字列長,_副文字列],( sub_atom(_対象文字列,_開始点,_副文字列長,_残り文字列長,_副文字列), sub_atom(_検索キーワード,_,_副文字列長,_,_副文字列)), L), sort(L1,L2), reverse(L2,L3), append(_,[[_副文字列長,_残り文字列長,_開始点,_副文字列長,_副文字列]|R],L3). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/556 # # sqlite3ですの # # id 1 name 伊藤 age 23 # id 2 name 田中 age 24 # id 3 name 山田 age 33 # id 4 name 桜庭 age 43 # id 5 name 中村 age 23 # を「age」の数値が多い順にソートしたいんですが良い方法ありますか? # あと「伊藤」と「中村」は「age」が一緒なんですけど # その場合はどうなりますか? # '「age」の数値が多い順にソートしたいんですが良い方法ありますか?'(L) :- findall([_age|[_id,_name,_age]],( 年齢(_id,_name,_age)), LL), sort(LL,LL2), reverse(LL2,LL3), append(_,[[_|L]|R],LL3). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/531 # # ACCESS SQLで以下のような処理はできるでしょうか? # (VBAの機能等を含めないSQLの処理結果のみで) # # 【テーブル】 # Tくだもの(名前, 名前) # Tアンケート(名前, 評価) ←評価には1〜5の数値が入る # # 【結果】 # みかん, 1, 3, 5, 3, 4, ... (以降アンケートの数だけ続く) # 評価値の列表示 :- findsetof(_名前,くだもの(_名前),_名前ならび), append(_,[_名前|R],_名前ならび), findall(_評価,アンケート(_名前,_評価),_評価ならび), concat_atom(_評価ならび,', ',_評価表示文字列), write_formatted('%t, %t\n',[_名前,_評価表示文字列]), R = []. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 評価値の列表示 :- くだもの(_名前), findall(_評価,アンケート(_名前,_評価),_評価ならび), concat_atom(_評価ならび,', ',_評価表示文字列), write_formatted('%t, %t\n',[_名前,_評価表示文字列]), fail. 評価値の列表示. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/508 # # http://www.dotup.org/uploda/www.dotup.org1202425.jpg # # ItemTable # ItemID,ItemName,Price,Maker # -------------------------------------- # '0001','Red bollpen',150,'Four Diamond' # '0002','Sharp pen',250,'Four Diamond' # '0003','Metal ruler',200,'Pantel' # '0004','Eraser',100,'Four Diamond' # '0005','Pencil box',150,'Pantel' # # 対応するPrologコードを書きなさい。 # % テーブル構造(関係名,_属性番号,_属性名,_属性名の変数文字列表現). テーブル構造('ItemTable',1,'ItemID','ItemID'). テーブル構造('ItemTable',2,'ItemName','ItemName'). テーブル構造('ItemTable',3,'Price','Price'). テーブル構造('ItemTable',4,'Maker','Maker'). 'ItemTable'('0001','Red bollpen',150,'Four Diamond'). 'ItemTable'('0002','Sharp pen',250,'Four Diamond'). 'ItemTable'('0003','Metal ruler',200,'Pantel'). 'ItemTable'('0004','Eraser',100,'Four Diamond'). 'ItemTable'('0005','Pencil box',150,'Pantel'). # Q1. # SELECT MIN(Price) AS Result FROM ItemTable; 'Q1'(Result) :- findmin(Price,'ItemTable'(_,_,Price,_),MIN_Price). # Q2. # SELECT ItemName,Price FROM ItemTable WHERE Price >= 250; 'Q2'(ItemName,Price) :- 'ItemTable'(_,ItemName,Price,_), Price >= 250. # Q3. # SELECT MAX(Price) FROM ItemTable WHERE Maker = 'Pantel'; 'Q3'(MAX_Price) :- findmax(Price,'ItemTable'(_,_,Price,_),MAX_Price). # Q4. # SELECT MIN(Price) FROM ItemTable WHERE Price > (SELECT MIN(Price) FROM ItemTable); 'Q4'(Min_Price) :- findmin(Price,'ItemTable'(_,_,Price,_),MIN_Price1), findmin(Price,( 'ItemTable'(_,_,Price,_),Price > MIN_Price1)), MIN_Price). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1056938879/131 # # table1 # id 名前 状態_id # ------------------ # 1 キムラ A # 2 田中   B # # # talbe2 # id 状態_id 状態(varchar) # ------------------ # 1 A 0 # 2 A 0 # 3 A 1 # 4 B 0 # 5 B 0 # # 結果 # 名前 状態 # ------------------ # キムラ 1 # 田中 0 # # になるようなSQL文でどう書きまっか?ちなみにORACLE9i。 # 結果(_名前,_状態) :- findsetof(_名前,table1(_,_名前,_),L1), sort(L1,L2), append(_,[_名前|_],L2), table1(_id,_名前,_状態_id) table2(_id,_状態_id,_状態). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/557 # # JMeterで何とか以下のHTMLの『二番目の』optionを拾いたいんだけど、どーも上手くいきません。 # <select name="select$item1" onchange="javascript:dummry();" id="select_item1"> # <option selected="selected" value="0">(none)</option> # <option value="1">item1</option> # <option value="2">item2</option> # <option value="3">item2</option> # </select> # ※optionの行にはいくつかタブが入っています。 # # 「id="select_item1">([.\r\n\t\f]*)option value="([1-9]*)"」と書けば拾ってくれると思ったんだけどダメでした。 # 何か忘れている箇所がありましたら、是非アドバイスをお願いします。 # # ちなみに(おそらくnameに$が入っているせいだと思いますが)HTMLリンクパーサは動きません(涙 # # '『二番目の』optionを拾いたい'(_htmlファイル,_二番目のoption) :- get_lines(Lines), '『二番目の』option'([],Lines,_二番目のoption). '『二番目の』option'([_],[_行|R],_二番目のoption) :- 'SPLIT'(_行,['>',''|_],L), last(L0,_二番目のoption),!. '『二番目の』option'(L,[_行|R],_二番目のoption) :- 'SPLIT'(_行,['>','',L), '『二番目の』option'([_|L],R,_二番目のoption). '『二番目の』option'(L,[_行|R],_二番目のoption) :- '『二番目の』option'(L,R,_二番目のoption). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/502 # # 元データの日付(スケジュールとかログの日付)を全件検索するとします。 # その時、「その時刻より後の18時」を取得(生成)するうまい方法はあるでしょうか。 # 言い換えると、日付の繰り上がりに対して小技があったら教えてください。 # # ターゲットデータベースはH2Databaseですが、「Oracleならこんな方法が(ry」とかでも # 勉強になりますのでお願いします。 # # 元データ # ------------------- # 2010-10-01 01:00:00 # 2010-10-03 17:00:00 # 2010-10-04 20:00:00 # ------------------- # # 欲しいデータ # ------------------- # 2010-10-01 01:00:00 2010-10-01 18:00:00 # 2010-10-03 17:00:00 2010-10-03 18:00:00 # 2010-10-04 20:00:00 2010-10-05 18:00:00 # ------------------- # '元データの日付(スケジュールとかログの日付)を全件検索するとします。その時、「その時刻より後の18時」を取得(生成)する'(_欲しいデータ) :- データベース(_元のデータ), 次の18時の時刻文字列表現(_元のデータ,_次の18時の時刻文字列表現), concat_atom([_元のデータ,' ',_次の18時の時刻文字列表現],_欲しいデータ). 次の18時の時刻文字列表現(_時刻文字列表現,_次の18時の時刻文字列表現) :- 時刻文字列表現から年、月、日、時、分、秒を得る(_時刻文字列,_年,_月,_日,_時,_分,_秒), _時 < 18, write_formatted_atom(_次の18時の時刻文字列表現,'%4d-%02d-%02d 18:00:00',[_年,_月,_日]),!. 次の18時の時刻文字列表現(_時刻文字列表現,_次の18時の時刻文字列表現) :- 翌日(_年,_月,_日,_翌日の年,_翌日の月,_翌日の日), write_formatted_atom(_次の18時の時刻文字列表現,'%4d-%02d-%02d 18:00:00',[_翌日の年,_翌日の月,_翌日の日]),!. 時刻文字列表現から年、月、日、時、分、秒を得る(_時刻文字列,_年,_月,_日,_時,_分,_秒) :- split(_時刻文字列,[' ','-',':'],[_年,_月,_日,_時,_分,_秒]), _時 < 18. 翌日(_翌日の年整数,1,31,_翌日の年整数,2,1) :- !. 翌日(_翌日の年整数,3,31,_翌日の年整数,4,1) :- !. 翌日(_翌日の年整数,4,30,_翌日の年整数,5,1) :- !. 翌日(_翌日の年整数,5,31,_翌日の年整数,6,1) :- !. 翌日(_翌日の年整数,6,30,_翌日の年整数,7,1) :- !. 翌日(_翌日の年整数,7,31,_翌日の年整数,8,1) :- !. 翌日(_翌日の年整数,8,31,_翌日の年整数,9,1) :- !. 翌日(_翌日の年整数,9,30,_翌日の年整数,10,1) :- !. 翌日(_翌日の年整数,10,31,_翌日の年整数,11,1) :- !. 翌日(_翌日の年整数,11,30,_翌日の年整数,12,1) :- !. 翌日(_翌日の年整数,2,28,_翌日の年整数,3,1) :- \+(うるう年(_翌日の年整数)),!. 翌日(_翌日の年整数,2,29,_翌日の年整数,3,1) :- うるう年(_翌日の年整数),!. 翌日(_年整数,12,31,_翌日の年整数,1,1) :- _翌日の年整数 is _年整数 + 1,!. 翌日(_翌日の年整数,_翌日の月整数,_日整数,_翌日の年整数,_翌日の月整数,_翌日の日整数) :- _翌日の日整数 is _日整数 + 1,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/500 # # No-色 # レコード1 001,赤 # レコード2 002,赤 # レコード3 003,青 # レコード4 004,青 # レコード5, 005,赤 # レコード6, 006,黒 # # このデータで、 『select 色,count(色 from テーブル group by 色 』とした時 # 最大レコード数(この場合、赤の5)を取得したいのですが・・・ # 定義された節数のもっとも多い色は(_色,_度数) :- findsetof(_色,テーブル(_No,_色),L1), findall([_度数,_色],( member(_色,L1), count(テーブル(_,_色),度数)), L2), findmax(_度数,member([_度数,_],L2),_最大度数), append(_,[[_度数,_色]|R],L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/490 # # SQLite3を使用しています。 # select distinct(hoge) # でhogeのユニークな値一覧が取得できますが、 # この結果の数を得る方法はないでしょうか? # # よろしくお願いします。 # # hogeのユニークな値のカウント(_テーブル,_解の数) :- hogeのユニークな値一覧を取得する(_テーブル,_値一覧), length(_値一覧,_解の数). hogeのユニークな値一覧を取得する(_テーブル,_値一覧) :- atom(_テーブル), テーブル構造(_テーブル/N,Nth,hoge), length(L,N), P =.. [_テーブル|L]), finsetof(X,( call(P), list_nth(Nth,L,X)), _値一覧),!. hogeのユニークな値一覧を取得する(_テーブル/N,_値一覧) :- テーブル構造(_テーブル/N,Nth,hoge), length(L,N), P =.. [_テーブル|L]), finsetof(X,( call(P), list_nth(Nth,L,X)), _値一覧),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/488 # # updateのwhere in句でワイルカードを使いたいのですが、 # mysqlで、 UPDATE table SET col='新しいデータ' where col in ('001古%', '003古%'.) としたのですが、 # 上手く出来ませんでした。 # # どうしたら出来るのでしょうか。 # # % 新しいデータ(新しいデータ). 節の定義順を保って述語を更新したい :- findall(_col,retract(table(_col)),L), append(_,[A|R],L), update_data(A,B), assertz(table(B)), R = [],!. update_data(_col,_新しいデータ) :- sub_atom(_col,0,4,_,'001古'),新しいデータ(_新しいデータ),!. update_data(_col,_新しいデータ) :- sub_atom(_col,0,4,_,'003古'),新しいデータ(_新しいデータ),!. update_data(_col,col). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/485 # # postgresqlです。副問合せの結果を2つの列の条件にするには # どうしたらよいでしょうか? # # SELECT * FROM TABLE_A # WHERE [TABLE_Aの列1または列2] IN (SELECT ID FROM TABLE_B WHERE NAME LIKE '%あ') # # # % 下の例ではテーブルの構造定義を持っていないため、SQLでは*で求められている"全ての"列を % 表現できていない。SQLはその代わり、SQL Query以前的に create table によってデータベースを % 定義して置く必要がある。 副問合せの結果を2つの列の条件にする例(_列1,_列2) :- 'TABLE_A'(_列1,_列2), 'TABLE_B'(_ID,_NAME), sub_atom(_NAME,_,1,0,あ), 'IDが列1か列2に一致する'(_ID,_列1,_列2). 'IDが列1か列2に一致する'(_ID,_ID,_) :- !. 'IDが列1か列2に一致する'(_ID,_,_ID) :- !. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/500 # # MYSQLなんですけど # # date      data # 2010/01/01 hoge1 # 2010/01/05 hoge2 # # みたいなテーブルから # # 2010/01/01 hoge1 # 2010/01/02 NULL # 2010/01/03 NULL # 2010/01/04 NULL # 2010/01/05 hoge2 # # のような結果の出せるSQLを求めてます。 # # select * from table between date '2010/01/01' and '2010/01/05' # # とするとデータのある2レコードしか出ないのですが、 # データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出せると助かります。 # # お助けください! # 'データがない部分も日付を出しつつ、デフォルトのデータないよっていう文字列を出す'(_日付下限,_日付上限) :- 入力された日付を年、月、日整数に変換(_日付下限,_年下限整数,_月下限整数,_日下限整数), 入力された日付を年、月、日整数に変換(_日付上限,_年上限整数,_月上限整数,_日上限整数), 日付の生成(_年下限整数,_月下限整数,_日下限整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数), swritef(_date,'%4r/%2r/%2r',[_年整数,_月整数,_日整数]), 生成日付のtableの組を表示する(_date), (_年整数,_月整数,_日整数) = (_年上限整数,_月上限整数,_日上限整数). 入力された日付を年、月、日整数に変換(_日付文字列,_年整数,_月整数,_日整数) :- split(_日付文字列,['/'],[_年整数,_月整数,_日整数]). 生成日付のtableの組を表示する(_date) :- table(_date,_data), write_formatted('%t %t\n',[_date,_data]),!. 生成日付のtableの組を表示する(_生成された日付) :- \+(table(_date,_)), writef('%t %t\n',[_date,'NULL']),!. 日付の生成(_年整数,_月整数,_日整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数), (_年整数,_月整数,_日整数) @=< (_年上限整数,_月上限整数,_日上限整数). 日付の生成(_年下限整数,_月下限整数,_日下限整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数) :- (_年整数,_月整数,_日整数) @=< (_年上限整数,_月上限整数,_日上限整数), 翌日(_年整数,_月整数,_日整数,_翌日の年整数,_翌日の月整数,_翌日の日整数), 日付の生成(翌日の年整数,_翌日の月整数,_翌日の日整数,_年整数,_月整数,_日整数,_年上限整数,_月上限整数,_日上限整数). 翌日(_翌日の年整数,1,31,_翌日の年整数,2,1) :- !. 翌日(_翌日の年整数,3,31,_翌日の年整数,4,1) :- !. 翌日(_翌日の年整数,4,30,_翌日の年整数,5,1) :- !. 翌日(_翌日の年整数,5,31,_翌日の年整数,6,1) :- !. 翌日(_翌日の年整数,6,30,_翌日の年整数,7,1) :- !. 翌日(_翌日の年整数,7,31,_翌日の年整数,8,1) :- !. 翌日(_翌日の年整数,8,31,_翌日の年整数,9,1) :- !. 翌日(_翌日の年整数,9,30,_翌日の年整数,10,1) :- !. 翌日(_翌日の年整数,10,31,_翌日の年整数,11,1) :- !. 翌日(_翌日の年整数,11,30,_翌日の年整数,12,1) :- !. 翌日(_翌日の年整数,2,28,_翌日の年整数,3,1) :- \+(うるう年(_翌日の年整数)),!. 翌日(_翌日の年整数,2,29,_翌日の年整数,3,1) :- うるう年(_翌日の年整数),!. 翌日(_年整数,12,31,_翌日の年整数,1,1) :- _翌日の年整数 is _年整数 + 1,!. 翌日(_翌日の年整数,_翌日の月整数,_日整数,_翌日の年整数,_翌日の月整数,_翌日の日整数) :- _翌日の日整数 is _日整数 + 1,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/479 # # [1] 授業単元: プログラミング基礎 # [2] 問題文(含コード&リンク): # 適正なおつりを出すプログラムを作成しなさい # 例として次のようにすること # 金額を入力してください。 # 12345 # 一万円:1枚 # 五千円:0枚 #  千円:2枚 # 五百円:0枚 #  百円:3枚 # 五十円:0枚 #  十円:4枚 #  五円:1枚 #  一円:0枚 # % 現在のProlog仕様の弱点のひとつとして、定義述語データベースの素直な更新(節順序を変えずに % 値だけ更新すること)ができないということがある。retractされた節はassertaで先頭に追加するか % assertzで末尾の節として追加する他ない。この課題でも金種金額の大きい順に処理する必要から、 % findall/3で入手したレジの内容のリストを、その都度降順に整列することを余儀なくされている。 % レジ(10000,7). レジ(5000,1). レジ(2000,0). レジ(1000,9). レジ(500,2). レジ(100,20). レジ(50,6). レジ(10,14). レジ(5,1). レジ(1,30). 適正なおつりを出す(_発生したおつり) :- レジの中身をならびに変換(_金種と枚数ならび), 金種問題(_発生したおつり,_金種と枚数ならび,_おつりの金種と枚数ならび), append(_,[[_金種,_枚数]|R],_おつりの金種と枚数ならび), 金種の漢字表示(_金種,_金種の漢字表示), write_formatted('%6s : %t枚\n',[_金種の漢字表示,_枚数]), レジの金種残高の更新(_金種,_枚数), R = []. 金種問題(0,_,[]) :- !. 金種問題(_残高,[],_) :- _残高 > 0, write_formatted('レジの小銭が%t円不足しました\n',[_残高]),!,fail. 金種問題(_残高1,[[_金種,_レジの枚数]|R1],[[_金種,_枚数]|R2]) :- _枚数 is _残高1 // _金種, \+(_枚数=0), \+(_レジの枚数=0), _枚数 =< _レジの枚数, _残高2 is _円 mod _金種, 金種問題(_残高2,R1,R2). 金種問題(_残高1,[[_金種,_レジの枚数]|R1],[[_金種,_レジの枚数]|R2]) :- _枚数 is _残高1 // _金種, \+(_枚数=0), \+(_レジの枚数=0), _枚数 > _レジの枚数, _残高2 is _残高1 - _金種 * _レジの枚数, 金種問題(_残高2,R1,R2). 金種問題(_残高,[_|R1],R2) :- 金種問題(_残高,R1,R2). レジの中身をならびに変換(_降順に整列した金種と枚数ならび) :- findall([_金種,_レジの枚数],レジ(_金種,_レジの枚数),_金種と枚数ならび), 金種を降順に整列(_金種と枚数ならび,_降順に整列した金種と枚数ならび). 金種を降順に整列(_金種と枚数ならび,_降順に整列した金種と枚数ならび) :- sort(_金種と枚数ならび,_昇順に整列した金種と枚数ならび), reverse(_昇順に整列した金種と枚数ならび,_降順に整列した金種と枚数ならび). レジの金種残高の更新(_金種,_おつりに必要となった枚数) :- retract(レジ(_金種,_現在の枚数)), _おつりを支払った後の枚数 is _現在の枚数 - _おつりに必要となった枚数, assertz(レジ(_金種,_おつりを支払った後の枚数)). 金種の漢字表示(10000,一万円). 金種の漢字表示(5000,五千円). 金種の漢字表示(2000,二千円). 金種の漢字表示(1000,千円). 金種の漢字表示(500,五百円). 金種の漢字表示(100,百円). 金種の漢字表示(50,五十円). 金種の漢字表示(10,十円). 金種の漢字表示(5,五円). 金種の漢字表示(1,一円). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/408 # # よろしくお願いいたします。 # # ・DBMS名とバージョン #   HiRDB Ver8 # # ・テーブルデータ # <Aテーブル> # A1   A2   A3   A4   A5 # ------- ------- ------- ------- ---------- # XXXXXXX XX1   ABC 3 2009/05/08 # WWCWWCW WW2   CCB 1 2008/03/21 # DDDDDDD DD1   JPN 5 2007/08/08 # GGGGGGG GX9   SOX 2 1977/01/04 # FFFFFFF USJ   NPB 3 2001/09/11 # # # <Bテーブル> # B1   B2   B3   B4   B5 # ------- ------- ------- ------- ---------- # XXXXXXX XX1  ibicha  oshimu 2002/07/05 # XXXXXXX XX1  takeshi okada 2005/07/15 # XXXXXXX XX1  kamo shu 1857/09/25 # WWCWWCW WW2  wao wao 2008/10/22 # DDDDDDD DD1  ui hhh 2006/06/30 # DDDDDDD DD1  jojoj x5xx 1999/09/09 # DDDDDDD DD1  momo hara 2005/03/07 # DDDDDDD DD1  itai u- 2003/12/22 # DDDDDDD DD1  koma nogoal 2007/04/26 # GGGGGGG GX9   dame record 2009/11/14 # FFFFFFF USJ   iki tai 1995/08/15 # FFFFFFF USJ  sst ebuspi 2004/01/05 # FFFFFFF USJ  bb pp 2009/08/23 # # ・欲しい結果 # A1   A2   B1   B2   A4 B1andB2COUNT # ------- ------ ------- ------- ------- ------------ # GGGGGGG GX9 GGGGGGG GX9 2 1 # # # ・説明 # SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。 # A1とB1は、A2とB2は同じデータが基本です。 # Aテーブルの「A4」カラムにはBテーブルのレコード数を持っています。 # しかし、よくよく見るとAテーブルの「GGGGGGG」のA4には「2」のはずなのにBテーブルには実際にレコードは1つしかありません。 # こういう状態になってしまっているのを割り出したいのですがどのようにA4とBテーブルで数があってないものを抽出できるでしょうか。 # よろしくお願いいたします。 # # 集約値A4とBテーブルの組数が不整合であるか、Bテーブルに存在する組の集約がAテーブルにない :- findsetof([A1,A2],'Aテーブル'(A1,A2,_,_,_),L1), write('集約値A4とBテーブル組の不整合'), 集約値A4とBテーブル組の不整合(L1), findsetof([B1,B2],(Bテーブル'(B1,B2,_,_,_),L2), write('Bテーブルは存在するがAテーブルに集約されていない\n'), 'Bテーブルは存在するがAテーブルに集約されていない'(L2),!. 集約値A4とBテーブル組の不整合([]) :- !. 集約値A4とBテーブル組の不整合([[A1,A2]|R]) :- 'Aテーブル'(A1,A2,_,A4,_), count('Bテーブル'(A1,A2,_,_,_),Count), 診断(A1,A2,A4,Count), 集約値A4とBテーブル組の不整合(R). 診断(A1,A2,A4,0) :- write('対応するBテーブルの組がありません\n'),!. 診断(A1,A2,A4,Count) :- \+(A4=Count), write_formatted('Aテーブルのキー%t,%tの集約値A4=%tとBテーブルの同一キーのカウントが不整合です\n',[A1,A2,A4,Count]),!. 診断(_,_,_,_). 'Bテーブルは存在するがAテーブルに集約されていない'([]) :- !. 'Bテーブルは存在するがAテーブルに集約されていない'([[B1,B2]|R]) :- 'Aテーブル'(B1,B2,_,_,_), 'Bテーブルは存在するがAテーブルに集約されていない'(R),!. 'Bテーブルは存在するがAテーブルに集約されていない'([[B1,B2]|R]) :- 'Bテーブル'(B1,B2,B3,B4,B5), write_fromatted('Aテーブルに集約が存在しない組は%t,%tです\n',[B1,B2,B3,B4,B5]), 'Bテーブルは存在するがAテーブルに集約されていない'(R),!. % 以下のサイトは % ***** tag_select / 2 ***** tag_select(NAME,OptionList) :- tag_select_option(OptionList,OptionList_2), tag(select([name=NAME],OptionList_2)),!. tag_select_option([],[]) :- !. tag_select_option([[V,A]|R1],[option([value=V2],[A])|R2]) :- concat(['"',V,'"'],V2), tag_select_option(R1,R2),!. tag_select_option([A|R1],[option([],[A])|R2]) :- not(atomic(A)), tag_select_option(R1,R2),!. tag_select_option([A|R1],[option([],[A])|R2]) :- atomic(A), tag_select_option(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/417 # # MySQL Ver5以降で質問です。 # # まずテーブルの説明をします。 # user_dataテーブル user_id, level # friendテーブル user_id, friend_user_id # という2つのテーブルがあります。 # # friendテーブルは 1, 2 というレコードであれば # 「user_id=2は、user_id=1の友達である」 # という意味となり、必ずそれぞれを入れ替えた「2, 1」というレコードも存在します。 # # user_dataテーブルから # 「levelが4で、かつあなたの友人ではないユーザーのレコードを全て取得する」 # ということをやりたいのですが、可能でしょうか。 # # 「levelが4で、かつあなたの友人『である』ユーザー〜」であれば(あなたのIDは1とします) # SELECT * FROM user_data INNER JOIN friend ON user_data.user_id = friend.user_id AND 1 = friend.friend_user_id; # でOKかと思います。 # この逆がやりたいのですが… # # サブクエリーを使って、NOT IN を使うなどすれば不可能では無さそうですが、1の友達が1000人くらいいるときつそうです。 # # # lebelを指定してあなたの友人でない人の全ての情報を取得する(_あなた,_leble,_友人でない人の情報ならび) :- findall([_user_id,_lebel,_友人ならび],( user_dataテーブル(_user_id,_lebel), \+(friendテーブル(_あなた,_user_id), findall(_freind_user_id,friendテーブル(_user_id,_freind_user_id),_友人ならび)), _友人でない人の情報ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/473 # # ・使用FB # derby 10.5 # # ・テーブルデータ # # 受注表 # ---------------- # 顧客名 | 受注個数 # ---------------- # あああ | 100 # いいい | 200 # ううう  | 100 # えええ | 300 # # ・欲しい結果 # 結果 # ------ # 顧客名 # ------ # いいい # えええ # # ・説明 # 受注個数150以上の顧客名を取得 # これを、ストアドプロシージャ使ってやりたいがストアドの作成、使用方法が分かりません。 # 手元にORACLEの資料がありとりあえず試してみるもderbyでは動作しなく、ネットを探し回ったのですが # 手掛かりが見つからず手詰まり状態です。 # 分かる方大変お手数ですが、助けてください。 # また、ココ読んどけ見たいなサイトあったら教えてください。 # # 受注個数150以上の顧客名を取得 :- write('結果\n------ \n顧客名 \n ------ \n'), 受注個数150以上の顧客名を取得(_顧客名), write_formatted('%t\n',[_顧客名]), fail. 受注個数150以上の顧客名を取得. 受注個数150以上の顧客名を取得(_顧客名) :- 受注表(_顧客名,_受注個数), _受注個数 >= 150. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/777 # # ・A, B, C, D・・・列があり、全て文字型(レコードは数値のみ)。 # A, Bがプライマリーキー # ・以下の条件を満たすA, Bの値 # Cが'04', '08', '09'のいずれかの行の中で、 # Dの値が最小のレコードのA, Bの組み合わせのうち、 # Bの値が最小のレコードすべてのA, B # ・説明 # 自分でsqlを作成すると、同じSELECT文が何度も出てきてしまいます。 # もっと重複のない文にできないのでしょうか? # select A, MIN(B) as B from # ( # (select A, B, D from foo where C in ('04', '08', '09')) T1 # inner join # ( # select A, MIN(D) as D from foo where C in ('04', '08', '09') # group by A # ) T2 # on T2.A = T1.A and T2.D = T1.D # ) T0 # group by A # # % ここでは要素をA,B,C,Dに限って考えることとする。 'Cが''04'', ''08'', ''09''のいずれかの行の中で、 Dの値が最小のレコードのA, Bの組み合わせのうち、 Bの値が最小のレコードすべてのA, B'(A,B) :- findmin([D,B],( foo(A,B,C,D),member(C,['04','08','09'])), L), foo(A,B,C,D), member([D,B],L). % 以下のサイトは ?- 'a##'. # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1260532772/827 # # 770で一度投稿しましたが問題文に不足が多かったため再度投稿します。 # [1] 授業単元:プログラミング # [2] 問題文:http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10362.txt[3] 環境 # 下記の機能を備えた極めて単純なデータベースシステムであるカード型データベースシステムの構築を考える。 # 課題7-1 # 下記のような方針でプログラムを作成せよ。 # # 新しい科目を登録する機能 # すでに登録されている科目を修正(更新)する機能 # 登録科目のソート(並び替え)を行う機能 # 登録科目の一部分のみを検索して取り出し、表示する機能 # 登録科目から、卒業までに必要な単位を計算し、表示する機能 # データベースファイルの仕様 # データベースファイルについては、本格的なデータベースになると、アクセス性や # 安定性など様々な要求を満たす必要があるが、ここでは最も単純なテキストファイルとする。 # さらに、書き込みをfprintfで、読み込みをfscanfで行えるように、 1行中に、 # それぞれの項目(フィールド)がスペースで区切られているようなファイルとする。 # なお、この場合、それぞれの項目はスペースを含んでいけないこととなる。 # 履修科目データベースシステムの例においては、例えば、 # 単位の種類(必修、選択必修など)、単位数、年次、前期か後期か、再履修かどうか、成績の6項目を含むこととする。 # ここで、いくつかの選択肢から選択するものについては、数字で置き換えることとする。 # このような仕様に基づいたファイルの例は以下のようなものになる。ここでは、ファイル名は、"ユーザ名_kamokudb.txt"とする。 # typedef struct _KAMOKU { # char name[MAX_KAMOKU_NAME]; /* 科目名 */ # int tanni_type; /* 必修、選択必修、選択、自由のいずれか */ # int tanni; /* 何単位か */ # int nenji; /* 何年次か */ # int kouki_flag; /* 前期なら0、後期なら1 */ # int sairi_flag; /* 再履修なら1、そうでないなら0 */ # int seiseki; /* 59点以下は不可、-1は未履修であることを示す */ # } KAMOKU; # # KAMOKU kamoku_list[200]; 履修科目データベースシステムを実装し、実行した例を以下に示す。なお、これは一例であって、課題は以下の通りに動作する必要はない。 ****** 単位データベースシステム ****** ユーザー名を入力して下さい:yamada ユーザー yamada は存在しません。データベースを新規に作成しますか? [1] Yes [2] No 番号を選択してください:1 **** 機能選択 **** [1] 科目登録 [2] 科目修正・削除 [3] データベース表示 [4] 必要単位数の表示 [5] 検索 [6] 並び替え [99] プログラム終了 機能を選択してください:1 **** 科目登録 **** 登録する科目を入力します。スペースを含まないローマ字で入力して下さい。 エンターキーのみを入力すると、科目の登録が終了します。 科目名:programming_ennsyuu_2 programming_ennsyuu_2 の情報を入力して下さい。 [1] 必修 [2] 選択必修 [3] 選択 [4] 自由 単位の種類:1 単位数:1 年次:2 [1] 前期 [2] 後期 前期・後期:2 [1] 非再履修 [2] 再履修 再履修:1 成績(-1:未履修):70 programming_ennsyuu_2 の情報を次のように登録します:必修, 1単位, 2年次, 後期, 非再履修, 70点 [1] 登録 [2] 再入力 番号を選択してください:1 programming_ennsyuu_2 の情報を登録しました。 科目名:denki_kairo_ennsyuu : 科目名: 科目登録を終了します。 **** 機能選択 **** : 機能を選択してください:2 **** 科目修正・削除 **** [1] programming_ennsyuu_2 [2] denki_kairo_ennsyuu [3] denki_kairo_kiso [4] digital_shingou_syori : 修正・削除する科目を選択して下さい:2 denki_kairo_ennsyuu の情報を修正して下さい。 最初の単位の種類で、[0] 削除 を選択すると、削除されます。 また、エンターキーを押すと、大括弧内の値が選択されます。 [0] 削除 [1] 必修 [2] 選択必修 [3] 選択 [4] 自由 単位の種類[3]: 単位数[1]: 年次[2]: [1] 前期 [2] 後期 前期・後期[1]: [1] 非再履修 [2] 再履修 再履修[1]: 成績(-1:未履修)[75]:85 denki_kairo_ennsyuu の情報を次のように修正します:選択, 1単位, 2年次, 前期, 非再履修, 85点 [1] 登録 [2] 再入力 番号を選択してください:1 denki_kairo_ennsyuu の情報を修正しました。 : 機能を選択してください:5 **** 検索 **** [1] 科目名 [2] 年次 [3] 前期・後期 [4] 不可の科目 検索したい項目を選択して下さい:2 年次を検索します。 検索対象:2 年次が 2 であるのは以下のものです: denki_kairo_kiso: 選択必修, 2単位, 2年次, 前期, 非再履修, 65点 denki_kairo_ennsyuu: 選択, 1単位, 2年次, 前期, 非再履修, 85点 programming_ennsyuu_1: 必修, 1単位, 2年次, 前期, 非再履修, 75点 programming_ennsyuu_2: 必修, 1単位, 2年次, 後期, 非再履修, 70点 digital_shingou_syori: 必修, 2単位, 2年次, 後期, 非再履修, 30点 : : 機能を選択してください:6 **** 並び替え **** [1] 科目名 [2] 年次 [3] 点数 どの項目で並べ替えるか選択して下さい:3 点数を昇順で並べ替えます。 digital_shingou_syori: 必修, 2単位, 2年次, 前期, 非再履修, 30点 denki_kairo_kiso: 選択必修, 1単位, 2年次, 前期, 非再履修, 65点 programming_ennsyuu_2: 必修, 1単位, 2年次, 後期, 非再履修, 70点 programming_ennsyuu_1: 必修, 1単位, 2年次, 前期, 非再履修, 75点 denki_kairo_ennsyuu: 選択, 1単位, 2年次, 前期, 非再履修, 85点 : : 機能を選択してください:4 **** 必要単位数の表示 **** 卒業に必要な単位数は、合計 62単位 総合基礎部門 計0単位 選択必修科目 0単位 選択科目 0単位 専門教育部門 計62単位 必修科目 12単位 選択必修科目 16単位 選択科目 34単位 : 機能を選択してください:99 プログラムを終了します。 データベースファイル yamada_kamokudb.txt を更新しました。 拡張 上記のプログラムの拡張を考える。例えば、以下のようなものが考えられる。 修得済み単位数や、不可となった科目を表示するなど、上記以外の機能を提供する。 検索において、完全一致のものだけでなく、条件に見合ったものを出力するようにする。 並び替えにおいて、年次だけでなく、年次と前期・後期を考慮した並べ替えをするなど、 他の並び替え方法を提供する。 データベースファイルとして、コンマ区切りのテキストファイルを用いる。 上記では、データファイルにスペース区切りのテキストファイルを用いたが、コンマ区切りのテキストファイル(CSVファイル)が用いられることも多い。この場合、フィールドにスペースが含まれていても問題なく動作する(ただし、コンマが含まれる場合には何らかの対策が必要になる)。 CSVファイルの読み込みのためには、いくつかの方法があるが、fgetsで読み込み、文字','を探す方法などが考えられる。また、strchrという関数が、文字列から特定の文字を含む箇所を取り出すものであるため、 fgetsとこれを組み合わせる方法もある。 構造体の配列を用いるのではなく、構造体へのポインタに対しmallocでメモリ確保する方法を用いる。 この場合、状況に応じてサイズを変えることが可能となる。ただし、確保したメモリは、使わなくなった場合には解放する必要がある。 KAMOKU *kamoku_list = NULL; : int num_list = 200; : kamoku_list = malloc(sizeof(struct _KAMOKU) * num_list); /* これ以降は、200の要素を持つ構造体の配列と同様に使用できる */ : printf("成績:%d\n", kamoku_list[0].seiseki); : free(kamoku_list); その他、既存のデータベースシステム等を参考にして機能を追加する。 履修科目データベースの検索(_検索項目,_検索鍵,_検索データ) :- get_split_lines('ユーザ名_kamokudb.txt',[' '],LL), member(_検索データ,LL), 鍵情報(_検索項目名,_検索データ,_検索鍵). 鍵情報(科目名,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_科目名). 鍵情報(単位の種類,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_単位の種類). 鍵情報(単位数,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_単位数). 鍵情報(年次,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_年次). 鍵情報(後期,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_後期). 鍵情報(前期,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_前期). 鍵情報(再履修,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_再履修). 鍵情報(成績,[_科目名,_単位の種類,_単位数,_年次,_後期,_前期,_再履修,_成績],_成績). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 鍵情報ソースプログラムの生成(_項目名ならび) :- append(_,[_項目名|R],_項目名ならび), findall(B,(member(A,_項目名ならび),concat_atom(['_',A],B)),L2), concat_atom(L2,',',_項目名ならび文字列), write_formatted('鍵情報(%t,[%t],_%t).\n',[_項目名,_項目名ならび文字列,_項目名]), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/455 # # 質問です。 # where句が膨大な数の条件式による論理和(OR)で構成されているselect文において、 # 得られた各レコードがどの条件式によるものかを判断したい場合どのようにするべきですか? # # 例えば下のようなテーブル(t)に対して # id name sex age # 0 tanaka male 25 # 1 yamada female 18 # 2 suzuki male 16 # # select name from t where age < 20 or sex = 'male'; # # を発行した場合すべてのnameが得られますが、それぞれのレコードがどの条件式によって得られたものかを判断したいと考えています。 # # '膨大な数の条件式による論理和(OR)で構成されているselect文において、得られた各レコードがどの条件式によるものかを判断したい'(_id,_name,_sex,_age,_条件式) :- t(_id,_name,_sex,_age), 条件(_id,_name,_sex,_age,_条件式). 条件式(_id,_name,_sex,_age,age < 20) :- _age < 20,!. 条件式(_id,_name,_sex,_age,sex = male) :- _sex = male,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/451 # # 最近になってDBの勉強を始めたのですが詰ってしまったのでちょっと質問させてください。 # # 使っているのは、derbyです、バージョンはij起動時に10.5と表示されています # # ・テーブルデータ # 受注表 # ------------------- # 顧客コード | 受注個数 # ------------------- # 001 | 100 # 002 | 200 # 003 | 100 # 001 | 300 # 003 | 400 # # ・欲しい結果 # 結果 # --------------------------------- # 顧客コード | 個人平均値 | 全体平均値 # --------------------------------- # 001 |200 |240 # 002 |200 |240 # 003 |250 |240 # # ・説明 # SELECT #   顧客コード, #   AVG(受注個数) AS 個人平均値, #   (SELECT AVG(受注個数) FROM 受注表) AS 全体平均値  # FROM # 受注表 # GROUP BY # 顧客コード; # # 上記のSQLだとエラーが出て動かない(エラーメッセージ失念してしまいました) # どこがどう悪いのか現在の自分では分からなくてどうしようもない状態です。 # '受注簿から 顧客コード | 個人平均値 | 全体平均値 を各行に表示' :- findavg(_受注個数,受注表(_,_受注個数),_全体平均値), findsetof(_顧客コード,受注表(_顧客コード,_受注個数),L), append(_,[_顧客コード|R],L), findavg(_受注個数,受注表(_顧客コード,_受注個数),_個人平均値), write_formatted('%t | %t | %t\n',[_顧客コード,_個人平均値,_全体平均値]), R = []. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/609 # # postgres8.4を使ってます。 # レコード数が3件以上あるものを取得したいのですが # どう書けばよいでしょうか。 # # やりたいことのイメージはこんな感じです。 # select recordCD from Table where recordCD in (select recordCD from Table where count(recordCD) > 3); # % これだとrecodCDが件数分出力されてしまうので、一件のみの出力に変更した recordCDの位置を得る(_引数の数,_位置番号) :- 'テーブル構造'('Table',_引数の数,_位置番号,recordCD). レコード数が3件以上あるものを取得する(_recordCD) :- recordCDの位置を得る(_引数の数,_位置番号), functor(Q,'Table',_引数の数), arg(_位置番号,Q,_recordCD), findsetof(_recordCD,call(Q),L1), member(_recordCD,L1), count(Q,Count), Count >= 3. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/609 # # postgres8.4を使ってます。 # レコード数が3件以上あるものを取得したいのですが # どう書けばよいでしょうか。 # # やりたいことのイメージはこんな感じです。 # select recordCD from Table where recordCD in (select recordCD from Table where count(recordCD) > 3); # % これだとrecodCDが件数分出力されてしまうので、一件のみの出力に変更した recordCDの位置を得る(_引数の数,_位置番号) :- 'テーブル構造'('Table',_引数の数,_位置番号,recordCD). レコード数が3件以上あるものを取得する(_recordCD) :- recordCDの位置を得る(_引数の数,_位置番号), functor(Q,'Table',_引数の数), arg(_位置番号,Q,_recordCD), findsetof(_recordCD,call(Q),L1), member(_recordCD,L1), count(Q,Count), Count >= 3. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/594 # #(問) # ID | DATE     | DATA # --+----------+----- # 1 | 2007-11-11 | aaa # 2 | 2007-11-11 | bbb # 1 | 2007-11-10 | ccc # 3 | 2007-11-12 | ddd # 3 | 2007-11-11 | eee # 4 | 2007-11-10 | fff # 1 | 2007-11-12 | ggg # # このようなテーブルから、各idに対して最新の5件だけ抽出しなさい 各idに対して最新の5件だけ抽出する(_ID,_DATE,_DATA) :- findsetof(_ID,テーブル(_ID_1,_DATE_1,_DATA_1),L1), member(_ID,L1), findall([_DATE,_ID,_DATE,_DATA],テーブル(_ID1,_DATE,_DATA),L2), 最新の5件を抽出(L3,Len,_ID,_DATE,_DATA). 最新の5件を抽出(L1,_ID,_DATE,_DATA) :- sort(L1,L2), reverse(L2,L3), length(L3,Len), '5件を抽出'(L3,Len,_ID,_DATE,_DATA). '5件を抽出'(L,Len,_ID,_DATE,_DATA) :- Len =< 5, member([_,_ID,_DATE,_DATA],L). '5件を抽出'(L,Len,_ID,_DATE,_DATA) :- Len > 5, for(1,N,5), list_nth(N,L,[_,_ID,_DATE,_DATA]), N =< 5. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/443 # # ひとつのテーブルで各レコードは他のレコードと1:Nの親子関係にあります # コード  親コード データ # 1     1     A # 2     1     B # 3     2     C # 4     3     D # 5     1     E # 6     2     F # # まあこんな感じで1以外は全部親を1つ持ち親はひとつ以上の子を持ちます(子が無い親も居ますが) # これである親の子レコード以下を下記のような感じで全部抽出したいのですが # SQLだけで出来ますでしょうか # # コード=2のときの抽出結果 # コード データ 世代 # 3    C    1 # 4    D    2 # 6    F    1 # # 世代は2から何世代下にいるかです、子なら1孫なら2…ということです # # また無理ならこうゆうことを可能にするデータ構造を教えてください # DBはFireBird1.5を想定していますがフリーのDBなら何でも良いです # ある親の子孫を世代番号とデータ付きですべて調べあげる(_親番号,_コード,_データ,_世代) :- 子孫(_親番号,_コード,_データ,_世代). 子孫(_親,_子,_データ,1) :- テーブル(_子,_親,_データ). 子孫(A,B,_データ,_世代) :- テーブル(C,A,_), 子孫(C,B,_データ,_世代の二), _世代 is _世代の二 + 1. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/445 # # MySQL 5.1での質問です。 # # A B C # 1 q name1 # 2 w name2 # 3 e name3 # 4 q name4 # 5 t name5 # # 上記テーブルのB列の重複を除いたA,B,C列がほしい場合 # # SELECT DISTINCT B FROM table_name; # # ではB列の重複を除くだけで他の列がとれません。他の列も併せて取得する場合はどのような解決策がありますか? # # 望んでる結果は以下のものです。 # # A B C # 1 q name1 # 2 w name2 # 3 e name3 # 5 t name5 # 'B列の重複を除く際のルール'(_重複行ならび,_重複を除いた行) :- _重複行ならび = [_重複を除いた行|_],!. 'B列の重複を除いたA,B,C列がほしい'(_重複を除いた行) :- findsetof(_B列,foo(_,_B列,_),_重複を取り除いたB列ならび), member(_B列,_重複を取り除いたB列ならび), findall(_行,( member([_A列,_B列,_C列],foo(_A列,_B列,_C列)), L1), 'B列の重複を除く際のルール'(L1,_重複を除いた行). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/386 # # ・DBMS名とバージョン #   SQL Server Compact 3.5 # # ・テーブルデータ 家計簿のようなデータです # Cd1 Cd2  Item      Cost # ---+----+-----------+---------------- # 1   0    食費      NULL # 1   1    弁当      500 # 2   0    光熱費     NULL # 2   1    水道料     1000 # 2   1    水道料     2000 # 2   2    ガス料     4000   # # ・欲しい結果 # Cd1 Cd2  Item      Sum # ---+----+-----------+---------------- # 1   0    食費      500 # 2   0    光熱費    7000 # # ・説明 # Cd1が大分類、Cd2が中分類を表してます。 # Cd2が0の場合、Itemは大分類の名称。それ以外の場合、中分類の名称が入ってます。 # 大分類ごとにItemと合計額が欲しいです。 # # # 大分類ごとにItemと合計額が欲しい :- findsetof([_Cd1,_Item],家計簿(_cd1,0,_Item,_),L1), member([_Cd1,_Item],L1), findsum(_Cost,(家計簿(_Cd1,_Cd2,_,_Cost),\+(_Cd2=0)),_Sum), write_formatted('%t %t %t %t\n',[_Cd1,0,_Item,_Sum]), fail. 大分類ごとにItemと合計額が欲しい. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/311 # # すみません、教えてください。 # # テーブルAとテーブルBがあり、 # テーブルAには、1〜1000万までの連番を格納しています。連番はキーです。 # テーブルBの方には、その連番の開始値と連番数が格納されています。 # # 開始値 | 連番数 # --------------- #   1001 | 100   ←1001から1100までの意味 #   5001 | 100   ←5001から5100までの意味 #   9001 | 100   ←9001から9100までの意味 # # テーブルBで指定されている連番に一致するレコードを # テーブルAから取得するにはどのように書けばよいでしょうか。 # 上記の例だと300件取得する形になりますが、 # テーブルBにも1万件程度のレコードがあります。 # # DBMSはOracle10gです。 # # テーブルBで指定されている連番に一致するレコードをテーブルAから取得する(_一致するレコードならび) :- P =.. [テーブルA,_連番|_付加情報], findall([_連番|_付加情報],( テーブルB(_開始値,_連番数), for(_開始値,_連番,_開始値 + _連番数 - 1), call(P)), _一致するレコードならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/374 # # はじめまして # # ・Access2000 # # 下のようなテーブルがあったときに # # テーブルA # 名前 科目 点数 # ---------------------- # 岡村 国語 51 # 岡村 数学 48 # 岡村 英語 39 # 徳田 国語 60 # 徳田 数学 30 # 徳田 英語 48 # 渡辺 国語 28 # 渡辺 数学 67 # 渡辺 英語 25 # # 下のように各科目の最高点を名前つきで取得するにはどうすればいいのでしょうか? # # 結果(各科目の最高点) # ---------------------- # 徳田 国語 60 # 岡村 数学 48 # 徳田 英語 48 # # # よろしくおねがいします。 # # # 各科目の最高点を名前つきで取得する(_最高点ならび) :- findsetof(_科目,テーブルA(_,_科目,_),_科目ならび), findall([_最高点氏名,_科目2,_最高点],( member(_科目2,_科目ならび), findmax([_点数,_名前2],テーブルA(_名前2,_科目2,_点数),[_最高点,_最高点氏名])), _最高点ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/369 # # 会社コード|部署コード|課コード|給料 # # というテーブルがあったとき、 # GROUP BY 会社コード , 部署コード # で部署毎の給料合計を出したいけど、 # 抽出結果の列には課コードも含めたい、 # というときってどうしたら良いのでしょうか? # イメージは↓の感じです。 # A会社|B部署|C課|100万円 # A会社|B部署|D課|100万円 # A会社|E部署|F課|500万円 # A会社|E部署|G課|500万円 # '抽出結果に課コードを加えた、会社コード・部署コードで集約した給与合計ならび'(_給与合計ならび) :- findsetof([_会社コード,_部署コード,_課コード],給料(_会社コード,_部署コード,_課コード,_),L1), findall([_会社コード,_部署コード,_課コード,_給与合計],( member([_会社コード,_部署コード,_課コード],L1), findsum(_給与,給与(_会社コード,_部署コード,_,_給与),_給与合計)),_給与合計ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/db/1274791771/364 # # 商品コード|売上店舗|売上個数 # # というテーブルから、 # 店舗毎の売上をまとめた列を追加した以下のようなテーブルを作りたいです。 # # 商品コード|店舗a売上個数|店舗b売上個数|店舗c売上個数| # # 現在は店舗毎の売上を集計したテーブルを別に作って、それを結合させて作っていますが、それ以外で単一のsqlで書く場合どうなるでしょうか? # # 簡単かと思ったら思いつきません。。 # お願いします。 # # # '商品コード|店舗a売上個数|店舗b売上個数|店舗c売上個数|'(_商品番号・売上店舗別売上合計ならび) :- findsetof(_商品番号,商品売上(_商品番号,_,_),L1), findall([_商品番号|_店舗別売上合計ならび],( member(_商品番号,L1), findall(_店舗別売上合計ならび,( member(_売上店舗,[a,b,c]), findsum(_売上個数, 商品売上(_商品番号,_売上店舗,_売上個数), _店舗別売上合計ならび))), _商品番号・売上店舗別売上合計ならび). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1276873238/295 # # 問題文(含コード&リンク):http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10839.txt # コピーさせていただきました # ホームページ上からデータを追加、検索したりする問題です。 # OS:Linux # # [1]学籍番号(stnum char(14))、名前(name char(30))、国語(kokugo int)、数学(math int)、理科(science int) # からなるテーブルseisekiをデータベース上に作る。 # # [2]ホームページからデータを追加、検索できるようにする。 # 表示結果には、学籍番号、名前、国語、数学、理科、合計を表示させる # # 学籍番号による検索(_学籍番号) :- seiseki(_学籍番号,_名前,_国語,_数学,_理科), write_formatted('%t,%t,%t,%t,%t\n',[_学籍番号,_名前,_国語,_数学,_理科]). 名前による検索(_名前) :- seiseki(_学籍番号,_名前,_国語,_数学,_理科), write_formatted('%t,%t,%t,%t,%t\n',[_学籍番号,_名前,_国語,_数学,_理科]). 国語の成績による検索(_国語,_国語成績) :- seiseki(_学籍番号,_名前,_国語,_数学,_理科), _国語成績. 数学の成績による検索(_数学,_数学成績) :- seiseki(_学籍番号,_名前,_数学,_数学,_理科), _数学成績. 理科の成績による検索(_理科,_理科成績) :- seiseki(_学籍番号,_名前,_理科,_数学,_理科), _理科成績. 成績の追加(_学籍番号,_名前,_国語,_数学,_理科) :- 学籍番号(_学籍番号), 名前(_名前), 国語(_国語), 数学(_数学), 理科(_理科), assertz(seiseki(_学籍番号,_名前,_国語,_数学,_理科)). 成績の変更(_学籍番号,_名前,_国語,_数学,_理科) :- 学籍番号(_学籍番号), 名前(_名前), 国語(_国語), 数学(_数学), 理科(_理科), retract(seiseki(_学籍番号,_,_,_,_)), assertz(seiseki(_学籍番号,_名前,_国語,_数学,_理科)). 成績の削除(_学籍番号) :- retract(seiseki(_学籍番号,_,_,_,_)). 学籍番号(_学籍番号) :- atom_length(_学籍番号,Len), Len =< 14, atom_chars(_学籍番号,Chars), すべてが数字(Chars),!. すべてが数字([]) :- !. すべてが数字([A|R]) :- member(A,['0','1','2','3','4','5','6','7','8','9']), すべてが数字(R). 名前(_名前) :- atom(_名前), atom_length(_名前,Len), Len =< 30,!. 国語(_国語) :- integer(_国語). 数学(_数学) :- integer(_数学). 理科(_理科) :- integer(_理科). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/283 # # MYSQL5で # テーブルA # create table A( id int , name_id int, word varchar(128) , primary key ( id ) , index ( name_id ) ) # テーブルB # create table B( id int, cid1 int, cid2 int , cid3 int , primary key ( id ) ) # テーブルC # create table C( id int, name varchar(128) , primary key ( id ) , unique ( name ) ) # こんな感じのテーブルを作成しました。テーブルAのname_idはテーブルBのidと、テーブルCのidはテーブルBのcid1〜cid3と関連します。 # テーブルAのname_id,wordとテーブルBのcd1〜cd3をテーブルCのnameで置き換えた値で取り出したいのですが、どう書けばいいでしょうか? # # # 'テーブルAのname_id,wordとテーブルBのcd1〜cd3をテーブルCのnameで置き換えた値で取り出す'(_name_id,_word,_name_1,_name_2,_name_3) :- 'A'(_,_name_id,_word), 'B'(_name_id,_cid1,_cid2,_cid3), 'C'(_cid1,_name_1), 'C'(_cid2,_name_2), 'C'(_cid3,_name_3). % 以下のサイトは # 出典 :: SQL質疑応答スレ 10問目 #276 # MySQL5を使用しています。 # # # 以下のようなテーブルがあります。 # # itemテーブル # item_id name color # 1 商品1 3 # 2 商品2 12 # 3 商品3 7 # # colorテーブル # color_id name # 1 赤 # 2 青 # 4 緑 # 8 黒 # # item.colorの部分は、ビット演算の概念を使って # 3なら赤+青 # 12なら緑+黒 # 7なら赤+青+緑 # の色を持っていることを意味します。 # # これを結合の段階で、以下のように色名を取得することは可能なのでしょうか? # # 1 商品1 赤 # 1 商品1 青 # 2 商品2 緑 # 2 商品2 黒 # 3 商品3 赤 # 3 商品3 青 # 3 商品3 緑 # item(1,商品1,3). item(2,商品2,12). item(3,商品3,7). color(1,赤). color(2,青). color(4,緑). color(8,黒). 色名を取得する :- forall(item(_item_id,_name,_color),(色の割り当て(_color,_色名),writef('%w %w %w\n',[_item_id,_name,_色名])). 色の割り当て(_色番号,_色名) :- findall([_color_id,_name],color(_color_id,_name),L), sort(L,L1), reverse(L1,L2), 色の割り当て(_色番号,L2,_色名). 色の割り当て(N,_,_) :- N =< 0,!,fail. 色の割り当て(N,[[C,_色名]|R1],_色名) :- 1 is N // C. 色の割り当て(N,[[C,_]|R1],_色名) :- 1 is N // C, M is N mod C, 色の割り当て(M,R1,_色名). 色の割り当て(N,[[C,_]|R1],_色名) :- 0 is N // C, M is N mod C, 色の割り当て(M,R1,_色名). % 以下のサイトは # 出典 :: SQL質疑応答スレ 10問目 #276 # MySQL5を使用しています。 # # # 以下のようなテーブルがあります。 # # itemテーブル # item_id name color # 1 商品1 3 # 2 商品2 12 # 3 商品3 7 # # colorテーブル # color_id name # 1 赤 # 2 青 # 4 緑 # 8 黒 # # item.colorの部分は、ビット演算の概念を使って # 3なら赤+青 # 12なら緑+黒 # 7なら赤+青+緑 # の色を持っていることを意味します。 # # これを結合の段階で、以下のように色名を取得することは可能なのでしょうか? # # 1 商品1 赤 # 1 商品1 青 # 2 商品2 緑 # 2 商品2 黒 # 3 商品3 赤 # 3 商品3 青 # 3 商品3 緑 # item(1,商品1,3). item(2,商品2,12). item(3,商品3,7). color(1,赤). color(2,青). color(4,緑). color(8,黒). 色名を取得する :- forall(item(_item_id,_name,_color),(色の割り当て(_color,_色名),writef('%w %w %w\n',[_item_id,_name,_色名])). 色の割り当て(_色番号,_色名) :- findall([_color_id,_name],color(_color_id,_name),L), sort(L,L1), reverse(L1,L2), 色の割り当て(_色番号,L2,_色名). 色の割り当て(N,_,_) :- N =< 0,!,fail. 色の割り当て(N,[[C,_色名]|R1],_色名) :- 1 is N // C. 色の割り当て(N,[[C,_]|R1],_色名) :- 1 is N // C, M is N mod C, 色の割り当て(M,R1,_色名). 色の割り当て(N,[[C,_]|R1],_色名) :- 0 is N // C, M is N mod C, 色の割り当て(M,R1,_色名). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/248 # # TABLE test # id | data # ---+------ # 100 | AAA # # TABLE hoge # id | value # ---+------ # 100 | 10 # 100 | 20 # # TABLE 100 # id |val1| val2 # ---+---+---- # 100 | 20 | 40 # 100 | 30 | 60 # # SELECT a.id, test.data, a.cnt + b.cnt + c.cnt # FROM # (SELECT id, SUM( aa.val1 ) cnt FROM (SELECT id, val1 FROM `100`)aa)a, # (SELECT id, SUM( bb.val2 ) cnt FROM (SELECT id, val2 FROM `100`)bb)b, # (SELECT id, SUM( value ) cnt FROM hoge WHERE id = 100)c,test # WHERE a.id = c.id AND test.id = 100 # # 欲しい結果 # id data a.cnt + b.cnt + c.cnt # ---------------------------- # 100 AAA 180 '欲しい結果 id data a.cnt + b.cnt + c.cnt' :- test(_id,_data), findsum(U,(findsum(_value,hoge(_id,_value),U1),findsum(_val3,('100'(_id,_val1,_val2),_val3 is _val1 + _val2),U2),U is U1 + U2),S). write('id data a.cnt + b.cnt + c.cnt\n'), write_formatted('%t %t %t\n',[_id,_data,S]),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/243 # # プログラム言語で以下の集約を定義しなさい。  # SELECT CASE pref_name #        WHEN '徳島' THEN '四国' #        WHEN '香川' THEN '四国' #        WHEN '愛媛' THEN '四国' #        WHEN '高知' THEN '四国' #        WHEN '福岡' THEN '九州' #        WHEN '佐賀' THEN '九州' #        WHEN '長崎' THEN '九州' #        ELSE 'その他' END AS district, #     SUM(population) #  FROM PopTbl #  GROUP BY CASE pref_name #        WHEN '徳島' THEN '四国' #        WHEN '香川' THEN '四国' #        WHEN '愛媛' THEN '四国' #        WHEN '高知' THEN '四国' #        WHEN '福岡' THEN '九州' #        WHEN '佐賀' THEN '九州' #        WHEN '長崎' THEN '九州' #        ELSE 'その他' END; 地方で集約する(_地方,_人口) :- findsetof(_地方,( 'PopTbl'(_pref_name,_population), 地方(_地方,_pref_name)), L1), append(_,[_地方|_],L1), findsum(_population,( 'PopTbl'(_pref_name,_population), 地方(_地方,_pref_name)), _人口). 地方(四国,徳島). 地方(四国,香川). 地方(四国,愛媛). 地方(四国,高知). 地方(九州,福岡). 地方(九州,佐賀). 地方(九州,長崎). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/231 # # tbl1にnum1,num2,id1,id2,id3 # tbl2にid,name,ssというフィールドがあるとして # SELECT name, num1, num2, id1, id2, id3, time FROM tbl1, tbl2 # WHERE num1 = 1 # AND id1 = ( SELECT id FROM tbl2 WHERE ss = "monga") # 上記のようなSQLを # 特定のフィールドが他の行と重複してたら抜かすというのはどうやればいいでしょうか? # 単にdistinctつけるだけだとどれかひとつでも重複していなかったら抽出されますよね。 # id1,id2,id3が他のレコードのid1,id2,id3と重複してたら # 検索結果に入れないみたいな感じにしたいのですが。 # MYSQLです。 'id1,id2,id3が他のレコードのid1,id2,id3と重複してたら検索結果に入れない'([_name,_num1,_num2,_id1,_id2,_id3]) :- findall([_name,_num1,_num2,_id1,_id2,_id3],( tbl1(num1,_num2,_id1,_id2,_id3), num1 = 1, tbl2(id1,_name,monga)), L1), findsetof([_id1,_id2,_id3],member([_,_,_,_id1,_id2,_id3],L1),L2), findall([_id1,_id2,_id3],( count((member([_id1,_id2,_id3],L2),1)), L2), member([_name,_num1,_num2,_id1,_id2,_id3],L1), member([_id1,_id2,_id3],L2). % 以下のサイトは # 出典 :: SQL質疑応答スレ 10問目 #197 # ・DBMS名とバージョン # VB2008でOLEDBを使ってOracle10gに繋いでます。 # # ・テーブルデータ # どの部品にはどの部品が使われてて〜といううような、 # 部品の構成を表す、下記のような親子関係と必要数のテーブルがあります # ------------- # OYA KO KAZU # ------------- # A   B  1 # A   G  1 # B   C  1 # B   F  1 # C   D  1 # C   E  1 # G   C  2 # G   H  1 # # # ツリーで表記すると、 # A # ├B # │├C # ││├D # ││└E # │└F # └G #  ├C #  │├D #  │└E #  └H # # Aという部品は、BとGの部品で出来ている。 # Bという部品はCとFの部品で出来ている〜という感じです。 # # ・欲しい結果 # これを階層のレベルと、それぞれの子の合計数を出したい。 # ここでいうBの下のCは1なので、DもEも1だが、 # Gの下のCは2なので、DもEもx2されて2になる # ---------------- # LV KO  GOUKEI # ---------------- # 1  B   1 # 2  C   1 # 3  D   1 # 3  E   1 # 2  F   1 # 1  G   1 # 2  C   2 # 3  D   2 # 3  E   2 # 2  H   1 # # # 今は、プログラム側で親から子を見る所をサブルーチンで組み、回帰処理でループさせてるので、 # リクエストが多く、あまりにも酷いかなぁ。。。と。 # 色々サンプルを見てconect byとかよく似てるんで、何かやり方があるのかな?と思い質問してみました。 # # 部品('A','B',1). 部品('A','G',1). 部品('B','C',1). 部品('B','F',1). 部品('C','D',1). 部品('C','E',1). 部品('G','C',2). 部品('G','H',1). 必要な部品数(_階層,_親,1) :- \+(部品(_親,_,_)), writef('%w,%w,%w\n',[_階層,_親,1]),!. 必要な部品数(_階層,_親,_必要な部品数) :- freeze(_必要な部品数,writef('%w,%w,%w\n',[_階層,_親,_必要な部品数])), findall(_子供の部品数,( 部品(_親,_子,_個数), succ(_階層,_階層_2), 必要な部品数(_階層_2,_子,_子供の部品数_1), _子供の部品数 is _子供の部品数_1 * _個数),_部品数のならび), sum_list(_部品数のならび,_必要な部品数). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/200 # # JDK1.4とオラクル9iです # # TESTのテーブルから下の結果を得たいのですが可能でしょうか? # # 1カラム目はIDで # 2カラム目は開始日で # 3カラム目は終了日です # # # テーブルTEST # a,20110403,20110611 # b,20110505,20110721 # # 結果 # a,201104 # a,201105 # a,201106 # b,201105 # b,201106 # b,201107 # # 連続した日付の生成(_ID,_年月) :- 'TEST'(_ID,_開始日,_終了日), sub_atom(_開始日,0,6,_,_開始年月), sub_atom(_終了日,0,6,_,_終了年月), 年月の生成(_開始年月,_年月,_終了年月). 年月の生成(_開始年月,_,_終了年月) :- _開始年月 @> _終了年月,!. 年月の生成(_開始年月,_開始年月,_終了年月). 年月の生成(_開始年月,_年月,_終了年月) :- 次の年月(_開始年月,_次の年月), 年月の生成(_次の年月,_年月,_終了年月). 次の年月(_年月,_次の年月) :- sub_atom(_年月,4,2,_,'12'), sub_atom(_年月,0,4,_,_年), atom_to_term(_年,_年整数,_), _年整数2 is _年整数 + 1, number_chars(_年整数2,Chars), atom_chars(_次の年,Chars), concat_atom([_次の年,'01],_次の年月),!. 次の年月(_年月,_次の年月) :- atom_to_term(_年月,_年月整数,_), _年月整数2 is _年月整数 + 1, number_chars(_年月整数2 is Chars), atom_chars(_次の年月,Chars). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/177 # # 質問させてください。 # # ・DBMS名とバージョン # MySQL 5.0.27-1 # # ・テーブルデータ # DATE    | DATA # ------------+---------- # 2010-06-01 | aaa # 2010-06-02 | bbb # 2010-06-03 | ccc # 2010-06-04 | ddd # 2010-06-05 | eee # 2010-06-06 | fff # 2010-06-07 | ggg # # ・欲しい結果 # 最新3件を昇順で。 # DATE    | DATA # ------------+---------- # 2010-06-05 | eee # 2010-06-06 | fff # 2010-06-07 | ggg # # ・説明 # select DATE, DATA from TABLE order by DATE desc limit 3; # とすれば、最新3件を降順で取得できますが、 # できれば降順でなく昇順で最新3件を取得したいです。 # # 'DATEの最新3件を昇順で取得する'(L) :- findsort([DATE],テーブル(DATE,DATA),L1), length(L,3), append(_,L,L1). findsort(_鍵ならび,P,_解ならび) :- P =.. [F|L1], append(_鍵ならび,L1,L2), findall(L2,P,L3), sort(L3,L4), findall(L1,member(L2,L4),_解ならび). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1274827528/955 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 以下のプログラムで、pointを昇順に並び替えるプログラムを作る。ソートの部分のみを書き換え、プログラムを作りなさい。 # http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10713.txt # # struct data { # int car_num; # char name[MAX_LEN]; # char cons[MAX_LEN]; # char nationality[MAX_LEN]; # int birth; # double point; # }; % % ここでは単位節で定義された述語データベースの整列について考えよう。 % f1(1,'Jenson Button','McLaren','British',1980,106). f1(2,'Lewis Hamilton','McLaren','British',1985,109). f1(3,'Michael Schumacher','Mercedes GP','German',1969,34). f1(4,'Nico Rosberg','Mercedes GP','German',1985,74). f1(5,'Sebastian Vettel','Red Bull','German',1987,90). f1(6,'Mark Webber','Red Bull','Australian',1976,103). f1(7,'Felipe Massa','Ferrari','Brazilian',1981,67). f1(8,'Fernando Alonso','Ferrari','Spanish',1981,94). f1(9,'Rubens Barrichello','Williams','Brazilian',1972,7). f1(10,'Nico Hulkenberg','Williams','German',1987,1). f1(11,'Robert Kubica','Renault','Polish',1984,73). f1(12,'Vitaly Petrov','Renault','Russian',1984,6). f1(14,'Adrian Sutil','Force India','German',1983,23). f1(15,'Vitantonio Liuzzi','Force India','Italian',1981,12). f1(16,'Sebastien Buemi','Toro Rosso','Swiss',1988,5). f1(17,'Jaime Alguersuari','Toro Rosso','Spanish',1990,3). f1(18,'Jarno Trulli','Lotus','Italian',1974,0). f1(19,'Heikki Kovalainen','Lotus','Finnish',1981,0). f1(20,'Karun Chandhok','HRT','Indian',1984,0). f1(21,'Bruno Senna','HRT','Brazilian',1983,0). f1(22,'Pedro de la Rosa','BMW Sauber','Spanish',1971,0). f1(23,'Kamui Kobayashi','BMW Sauber','Japanese',1986,1). f1(24,'Timo Glock','Virgin','German',1982,0). f1(25,'Lucas di Grassi','Virgin','Brazilian',1984,0). pointを昇順に並び替える(L) :- clause_sort([1],f1/6,L). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% pointを昇順に並び替える(L) :- データ構造(f1,_データ構造ならび), list_nth(N,_データ構造ならび,[point|_]), length(_データ構造ならび,Len), length(L0,Len), P =.. [f1|L0], findall(L0,P,L1), findall([_point|L2],( member(L2,L1), list_nth(N,L2,_point)), L3), sort(L3,L4), findall(L5,member([_|L5],L4),L). データ構造ならび(f1,[[car_num],[name],[cons],[nationality],[birth],[point]]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% pointを昇順に並び替える(X) :- データ構造(f1,_データ構造ならび), list_nth(M,_データ構造ならび,[point|_]), length(_データ構造ならび,Len), clause_sort([M],f1/Len,X), %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clause_sort(_順ならび,_関数 / _引数,X) :- functor(_頭部,_関数,_引数), findall(U,(clause(_頭部,_本体) , clause_sort_1(_順ならび,_頭部,_本体,U)),L), sort(L,L2), clause_sort_2(L2,X),!. clause_sort_1([],_頭部,_本体,[(_頭部 :- _本体)]) :- !. clause_sort_1([_鍵位置|R1],_頭部,_本体,[A|R2]) :- arg(_鍵位置,_頭部,A), clause_sort_1(R1,_頭部,_本体,R2). clause_sort_2([],[]) :- !. clause_sort_2([L|R1],[_頭部|R2]) :- last(L,(_頭部 :- true)), clause_sort_2(R1,R2), !. clause_sort_2([L|R1],[Q|R2]) :- last(L,Q), clause_sort_2(R1,R2),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/154 # # 質問です。 # Oracle10gです。 # # 部門の親子関係を示す以下のようなテーブルがある。 # # 親部門ID 子部門ID 子部門の区分 # 1       2      0 # 1       3      1 # 3       4      0 # 3       5      1 # 5       6      0 # 7       8      0 # 7       9      1 # 9       10     0 # # ある親部門IDを指定し、その部門以下の階層に含まれる部門のうち区分が0となっているものを取得したい。 # 上の例だと部門ID=1と指定した場合2,4,6を取得したい。 # # よろしくお願いします。 # # 'ある親部門IDを指定し、その部門以下の階層に含まれる部門のうち区分が0となっているものを取得したい。'(_親部門ID,_区間が0となっている子部門ID) :- 部門(_親部門ID,_子部門ID,_子部門の区分), その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID,_子部門区分,_区間が0となっている子部門ID). その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID,0,_子部門ID). その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID_1,_子部門の区分,X) :- 部門(_子部門ID_1,_子部門ID_2,_子部門の区分_2), その部門以下の階層に含まれる部門のうち区分が0となっているものを取得(_子部門ID_2,_子部門の区分_2,X). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/139 # # 期間の抽出について相談です。 # 元情報 # ID    START    END # -----   -----    ----- # 10    2010/06/01  2010/06/12 # 10    2010/06/13  2010/06/14 # 10    2010/06/15  NULL # 20    2010/06/01  2010/06/11 # 20    2010/06/13  2010/06/15 # ↓ # 欲しい情報 # ID    START    END # -----   -----    ----- # 10    2010/06/01  NULL # 20    2010/06/01  2010/06/11 # 20    2010/06/13  2010/06/15 # # ・開始日、終了日の期間重複はなし # ・IDごとにデータを抽出。抽出単位は連続している期間の最小開始日と最大終了日 # ・期間は綺麗に連続(ID=10)することもあれば非連続することもある(ID=20) # # アドバイス願います。 # # 'IDごとにデータを抽出。抽出単位は連続している期間の最小開始日と最大終了日' :- findsetof(_ID,期間(_ID,_期間下限,_期間上限),L1), findall([_ID,_最小開始日,_最大終了日],( member(_ID,L1), findmin([_ID,_開始日],開始日(_ID,_開始日),_最小開始日), findmax([_ID,_終了日],終了日(_ID,_終了日),_最大終了日)), L). write('ID START END \n----- ----- ----- \n'), append(_,[[_ID,_Start,_End]|R],L), write_formatted('%t %t %t\n',[_ID,_Start,_End]), R = []. 開始日(_ID,_開始日) :- 期間(_ID,_開始日,_). 終了日(_ID,_終了日) :- 期間(_ID,_開始日,_終了日),\+(_終了日='NULL'). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/96 # # 教えてください # table aから(dept,place)でのくくりでcount の次のレスに示すようにtop3を抽出したいです # # table a # dept|place|ext|count # aaaa|aaaaa|jar|10 # aaaa|aaaaa|com|4 # aaaa|aaaaa|scr|20 # aaaa|aaaaa|exe|80 # aaaa|aaaaa|bat|2 # aaaa|bbbbb|ace|10 # aaaa|bbbbb|arj|4 # aaaa|bbbbb|zip|20 # aaaa|bbbbb|rar|80 # aaaa|bbbbb|lzh|2 # bbbb|aaaaa|mdb|10 # bbbb|aaaaa|xls|4 # bbbb|aaaaa|ppt|20 # bbbb|aaaaa|doc|80 # bbbb|aaaaa|txt|2 # bbbb|bbbbb|gif|10 # bbbb|bbbbb|png|4 # bbbb|bbbbb|jpg|20 # bbbb|bbbbb|bmp|80 # bbbb|bbbbb|tif|2 # ↓ # aaaa|aaaaa|exe|80 # aaaa|aaaaa|scr|20 # aaaa|aaaaa|jar|10 # aaaa|bbbbb|rar|80 # aaaa|bbbbb|zip|20 # aaaa|bbbbb|ace|10 # bbbb|aaaaa|doc|80 # bbbb|aaaaa|ppt|20 # bbbb|aaaaa|mdb|10 # bbbb|bbbbb|bmp|80 # bbbb|bbbbb|jpg|20 # bbbb|bbbbb|gif|10 # 'table aからdept,placeのくくりでcountのtop3を抽出' :-     findsetof([_dept,_place],a(_dept,_place,_exit,_count)),     findall(X,findrsort([_count],a(_dept,_place,_ext,_count),X),L),     for(1,N,3),     list_nth(N,L,X),     write_formatted('%t|%t|%t|%t\n',X),     N = 3,     fail. 'table aからdept,placeのくくりでcountのtop3を抽出'. % findrsort/3,findsetof/2 は http://nojiriko.asia/prolog/findsort.html 参照 % 以下のサイトは 89:デフォルトの名無しさん:2010/06/05(土) 17:58:44 >>46 % Prolog 蛾(ごまだらきこけが,ひとりが科). 開帳(ごまだらきこけが,成虫,'23~32mm'). 色(ごまだらきこけが,成虫,体と翅,赤味がかった黄色). 斑点(ごまだらきこけが,成虫,体と翅,前翅,'15個'). 分布(ごまだらきこけが,本邦広くアジアにひろがっている). 食性(ごまだらきこけが,幼虫,コケ類). 長い毛(ごまだらきこけが,幼虫). 青い点(ごまだらきこけが,幼虫,背中に2列). 色(ごまだらきこけが,幼虫,灰色). 90:デフォルトの名無しさん:2010/06/05(土) 19:41:39 >>46 % Prolog (_ごまだらきこけが,ひとりが科) :- ごまだらきこけが(_ごまだらきこけが). 開帳(_ごまだらきこけが,成虫,'23~32mm') :- ごまだらきこけが(_ごまだらきこけが). 色(_ごまだらきこけが,成虫,体と翅,赤味がかった黄色) :- ごまだらきこけが(_ごまだらきこけが). 斑点(_ごまだらきこけが,成虫,体と翅,前翅,'15個') :- ごまだらきこけが(_ごまだらきこけが). 分布(_ごまだらきこけが,本邦広くアジアにひろがっている) :- ごまだらきこけが(_ごまだらきこけが). 食性(_ごまだらきこけが,幼虫,コケ類) :- ごまだらきこけが(_ごまだらきこけが). 長い毛(_ごまだらきこけが,幼虫) :- ごまだらきこけが(_ごまだらきこけが). 青い点(_ごまだらきこけが,幼虫,背中に2列) :- ごまだらきこけが(_ごまだらきこけが). 色(_ごまだらきこけが,幼虫,灰色) :- ごまだらきこけが(_ごまだらきこけが). 91:デフォルトの名無しさん:2010/06/05(土) 19:44:04 >>46 % Prolog 書き直し 蛾(_ごまだらきこけが,ひとりが科) :- ごまだらきこけが(_ごまだらきこけが). 開帳(_ごまだらきこけが,成虫,'23~32mm') :- ごまだらきこけが(_ごまだらきこけが). 色(_ごまだらきこけが,成虫,体と翅,赤味がかった黄色) :- ごまだらきこけが(_ごまだらきこけが). 斑点(_ごまだらきこけが,成虫,体と翅,前翅,'15個') :- ごまだらきこけが(_ごまだらきこけが). 分布(_ごまだらきこけが,本邦広くアジアにひろがっている) :- ごまだらきこけが(_ごまだらきこけが). 食性(_ごまだらきこけが,幼虫,コケ類) :- ごまだらきこけが(_ごまだらきこけが). 長い毛(_ごまだらきこけが,幼虫) :- ごまだらきこけが(_ごまだらきこけが). 青い点(_ごまだらきこけが,幼虫,背中に2列) :- ごまだらきこけが(_ごまだらきこけが). 色(_ごまだらきこけが,幼虫,灰色) :- ごまだらきこけが(_ごまだらきこけが). 92:デフォルトの名無しさん:2010/06/05(土) 19:49:08 >>91 たとえば、 あるものの幼虫はコケ類を食べる。そういうあるもののひとつは、ごまだらきこけがだ。 と読めばよいと思う。 93:デフォルトの名無しさん:2010/06/05(土) 20:53:07 出題者ではありませんが、勝手に批評します。 >>89 同じ項構造で他の生物にも適用できるよう、項: 蛾/2 は以下の方が 命題として適切ではないかと考えます。  種(ごまだらきこけが, 蛾). % ごまだらきこけがの種は蛾である。  科(ごまだらきこけが, ひとりが). % ごまだらきこけがの科はひとりがである。 項: 色/2 と 色/3 で混在していますが、どちらかに統一すべきだと考えます。  色(ごまだらきこけが, 成虫の体と翅, 赤味がかった黄色).  色(ごまだらきこけが, 幼虫, 灰色). または  色(ごまだらきこけが, 成虫, 体と翅, 赤味がかった黄色).  色(ごまだらきこけが, 幼虫, 全体, 灰色). >>90 ごまだらきこけが以外の蛾も多数登録されているものとして、 食性について問い合わせる場合を考えます。  ?- 食性(_蛾, _, コケ類) % コケ類を食べる蛾は何か?  _蛾=ごまだらきこけが >>90では、変数 _蛾 がアトムにならず変数のままですから、この問い合わせには 回答できていません。従って、解答としては>>89のほうが適切ではないかと考えます。 94:93:2010/06/05(土) 21:23:38 >>93を自己訂正 >項: 色/3 と 色/4 で混在していますが、どちらかに統一すべきだと考えます。 > > 色(ごまだらきこけが, 成虫の体と翅, 赤味がかった黄色). % 色/3 で統一 > 色(ごまだらきこけが, 幼虫, 灰色). > >または > > 色(ごまだらきこけが, 成虫, 体と翅, 赤味がかった黄色). % 色/4 で統一 > 色(ごまだらきこけが, 幼虫, 全体, 灰色). 95:デフォルトの名無しさん:2010/06/05(土) 22:14:49 >>93 適切な批評をいただき感謝します。 色のアリティが二種類になっているのは好ましくないですね。 種、科については、可能な限り、仕様(ここでは問題文)の文面から 述語名や変数名を拾うことを旨としているので、出てきませんでした。 とはいえ、私も「食べる」を「食性」に置き換えたりしていますが、 言語、概念による補強は必要だし、そうすることで述語として「強く」 なることも事実ですね。 >>90については、途中で端折りますが、以下のようなら自然でしょうか。 ごまだらきこけが(_ごまだらきこけが) :-     色(_ごまだらきこけが,幼虫,全体,灰色),     色(_ごまだらきこけが,成虫,赤味がかった黄色). 色(ごまだらきこけが,幼虫,全体,灰色), 色(ごまだらきこけが,成虫,赤味がかった黄色). 食性(ごまだらきこけが,幼虫,コケ類). 96:93:2010/06/05(土) 23:11:54 >>95 >>>90については、途中で端折りますが、以下のようなら自然でしょうか。 いいえ、不自然です。この問題(仕様)はすべてファクト(事実)から構成されています。 出題者の意図(文脈)は知りませんが、単純なのにわざわざ複雑なルール(推論)を組み込むのは、 解答として適切であるとは思えません。 もし納得できないようでしたら、いったんPrologプログラミングから離れて 数学の命題論理(初等数理論理学の一部)を勉強されることをお勧めします。 97:デフォルトの名無しさん:2010/06/06(日) 13:11:46 本質に迫るツッコミktkr 98:デフォルトの名無しさん:2010/06/06(日) 16:58:56 >>96 確かに。命題論理の勉強をします。カツオの定義など支離滅裂ですね。 私はPrologの核は単位節データベースであって、実際宿題スレでもデータベース板SQLの質問から 多数問題を採用してきました。一方、 このスレと「いろんな言語で宿題」スレに共通して、 親子(為義,義朝). 親子(義朝,頼朝). 先祖(A,B) :- 親子(A,B). 先祖(A,B) :- 親子(A,C),先祖(C,B). という定義に於いて、先祖/2はルールなのに、親子/2はなぜ事実なの?親子もルールで 書いていくとどうなるの?という疑問に対して、何らかの答えだすという試みもして きました。 よく分かっていないことは事実とせず、これからそれについてはルールが来るのだ、 今のところまだ未定義だけどね、というのが指摘いただいた箇所の意図であり、 奇妙な表現に拘る言い訳ということになります。 99:93:2010/06/06(日) 21:12:22 >>98 Prologの単位節は「関係の存在」というファクト(事実)を表現しています。 以下は源一族の家系の一部をファクトだけで表現した一例(の一部)です。  親_子(為義, 義朝). % 為義と義朝の間には親-子という関係が存在する。  先祖_子孫(為義, 頼朝). % 為義と義朝の間には先祖-子孫という関係が存在する。 家系が「ファクトだけで表現できる」のが分かるかと思います。 同様にごまだらきこけが(あるいは蛾という生物系)についてもファクトだけで表現できます。 ですから、単位節だけで表現できる課題(仕様)については、それだけで解答すべきであると考えます。 また、複数のファクトから新たな「関係の存在」を表現したのがルール(規則)です。  先祖_子孫(A, B) :- 親_子(A, B).   % ある人物AとBについて、AとBの間に親-子という関係が存在するならば、   % AとBの間には先祖-子孫という関係が存在する。  先祖_子孫(A, B) :- 親_子(A, C), 親_子(C, B),.   % ある人物AとBとCについて、AとCの間に親-子という関係が存在し、かつCとBの間に   % 親-子という関係が存在するならば、AとBの間には先祖-子孫という関係が存在する。 ファクト(事実)とルール(規則)は、どちらも「関係の存在」を表現しています。 Prologで記述した場合、その項の名前は関係の名前を指します。 ここで、>>90,91,95における項「ごまだらきこけが(_)」について、  **** ごまだらきこけがは関係ではありません!! **** ですから、これらの解答は明らかに不自然です。 100:93:2010/06/07(月) 00:50:12 >>99に間違いがあったので、訂正します。 > 先祖_子孫(A, B) :- 親_子(A, C), 先祖_子孫(C, B),. >  % ある人物AとBとCについて、AとCの間に親-子という関係が存在し、かつCとBの間に >  % 先祖-子孫という関係が存在するならば、AとBの間には先祖-子孫という関係が存在する。 101:デフォルトの名無しさん:2010/06/07(月) 08:46:50 >>95 こんな定義ならどうなんだ。 確信度(_ごまだらきこけが,ごまだらきこけが,60) :-     色(_ごまだらきこけが,_,幼虫,全体,灰色),     色(_ごまだらきこけが,_,成虫,赤味がかった黄色),     食性(_ごまだらきこけが,_,幼虫,コケ類). 色(_,ごまだらきこけが,幼虫,全体,灰色), 色(_,ごまだらきこけが,成虫,赤味がかった黄色). 食性(_,ごまだらきこけが,幼虫,コケ類). 102:デフォルトの名無しさん:2010/06/07(月) 08:54:28 >>99 それから、>>95 のごまだらきこけが は関係ではなく、クラスを表現しようとしているのではないかな。 103:93:2010/06/07(月) 17:19:35 あまり頭ごなしに不自然だ!!ばかりを言うのもアレなので....。 >>98 >先祖/2はルールなのに、親子/2はなぜ事実なの? >親子もルールで書いていくとどうなるの?という疑問に対して、 >何らかの答えだすという試みもしてきました。 「親-子」という関係は原始的な(これ以上は分解できない)ファクトだから、 ルールとして書くことは(私には)無理ですが、「親-子の関係」や「先祖-子孫の関係」という 関係そのものを扱えるファクト/ルールを書くことは可能です。たとえば 「AとBにはどんな関係があるか?(= AとBとの間に存在する関係は何か?)」という 問い合わせに答えることの可能な知識ベースです。 まず説明の前に、>>99では  ファクトとルールは、どちらも「関係の存在」を表現している と書きました。それを以下のように訂正します。  ファクトとルールは、どちらも「エンティティ(物)の存在」あるいは  「エンティティ間にある関係の存在」を表現している エンティティとは関係の対象となるオブジェクトを意味し、 たとえば「ごまだらきこけが」や「為義」を指します。 (長いので続く) 104:93:2010/06/07(月) 17:21:16 (>>103の続き) では、以降からは知識ベースの記述を始めます。まず基礎のファクトを書きます。  人物(為義).      % 為義という人物が存在する。  人物(義朝).      % 義朝という人物が存在する。  人物(頼朝).      % 頼朝という人物が存在する。 ここで、「親-子」と「先祖-子孫」を(関係ではなく)エンティティとして認識した上で、 ファクトとして書いてみます。  関係(親_子).       % 親-子という関係が存在する。  関係(先祖_子孫).     % 先祖-子孫という関係が存在する。  関係(親_子, 為義, 義朝). % 為義と義朝の間には親-子という関係が存在する。  関係(親_子, 義朝, 頼朝). % 義朝と頼朝の間には親-子という関係が存在する。 これらファクトを前提にルールを書きます。  関係(先祖_子孫, A, B) :- 人物(A), 人物(B), A\=B, 関係(親_子, A, B).   % あるA, Bについて、AおよびBという人物が存在し、   % かつAとBの間に親-子という関係が存在するならば、   % AとBの間には先祖-子孫という関係が存在する。  関係(先祖_子孫, A, B) :-     人物(A), 人物(B), 人物(C), A \= B, B \= C, A \= C,     関係(親_子, A, C), 関係(先祖_子孫, C, B).   % あるA, Bについて、A、BおよびCという人物が存在し、   % かつAとCの間に親-子という関係が存在し、   % かつCとBの間に先祖-子孫という関係が存在するならば、   % AとBの間にも先祖-子孫という関係が存在する。 (まだ続く) 105:93:2010/06/07(月) 17:33:51 (>>104の続き) 以下は、SWI-Prologでの実行例です。  為義と義朝は親子か?   ?- 関係(親_子, 為義, 義朝).   true .  % はい。  為義の子は誰か?   ?- 関係(親_子, 為義, X).   X = '義朝' ;  % 義朝です。   false.  為義の子孫は誰か?   ?- 関係(先祖_子孫, 為義, X).   X = '義朝' ;   X = '頼朝' ;  % 義朝と頼朝です。   false.  為義と義朝にはどんな関係があるか?   ?- 関係(R, 為義, 義朝).   R = '親_子' ;   R = '先祖_子孫' ;  % 親-子と先祖-子孫という関係があります。   false.  為義と頼朝にはどんな関係があるか?   ?- 関係(R, 義朝, 頼朝).   R = '先祖_子孫' ;  % 先祖-子孫という関係があります。   false. (まだ続く。次で終わり。) 106:93:2010/06/07(月) 17:36:21 (>>105の続き)  すべての関係を挙げよ。   ?- 関係(R, A, B).   R = '親_子',   A = '為義',   B = '義朝' ;  % 為義と義朝の間に親-子という関係が存在する。   R = '親_子',   A = '義朝',   B = '頼朝' ;  % 為義と頼朝の間に親-子という関係が存在する。   R = '先祖_子孫',   A = '為義',   B = '義朝' ;  % 為義と頼朝の間に先祖-子孫という関係が存在する。   R = '先祖_子孫',   A = '義朝',   B = '頼朝' ;  % 義朝と頼朝の間に先祖-子孫という関係が存在する。   R = '先祖_子孫',   A = '為義',   B = '頼朝' ;  % 為義と頼朝の間に先祖-子孫という関係が存在する。   false. (これで終わり。長レス失礼。) 107:93:2010/06/07(月) 18:08:39 >>102 では、オブジェクト指向(あるいはフレーム理論やオントロジーのような)知識を一般化する 枠組み(フレームワーク)を>>103-106で書いた知識ベースに導入してみます。  オブジェクト(昆虫).       % 昆虫はオブジェクトである。  オブジェクト(蛾).        % 蛾はオブジェクトである。  オブジェクト(ごまだらきこけが). % ごまだらきこけがはオブジェクトである。  関係(スーパークラス_サブクラス, 昆虫, 蛾).    % 蛾は昆虫のサブクラスである。  関係(クラス_インスタンス, 蛾, ごまだらきこけが). % ごまだらきこけがは蛾のインスタンスである。 オブジェクト指向という枠組みの導入によって、これまで「....が存在する」と解釈していたのを、 「....である」という解釈に進化させたことに注目してください。 オブジェクト指向におけるクラスという概念は「スーパークラス-サブクラス」および 「クラス-インスタンス」という関係で表現できます。これらはそれぞれ「is-a関係(またはkind-of関係)」と 「instance-of関係」と呼ばれることもあり、知識表現レベルではどちらも関係の特別なケース(クラス)です。 以上のように、(源氏の)家系や(蛾の)体系といった比較的単純な知識表現であれば、明解な解答が得られます。 不自然な解釈や小賢しい技法(テクニック)は必要ありません。命題論理と一階述語論理の守備範囲です。 % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/48 # # # ・テーブルの構造 # CREATE TABLE IF NOT EXISTS table ( # id integer NOT NULL auto_increment, # value integer NOT NULL, # PRIMARY KEY (id), # ); # # ・テーブルデータ # ID  VALUE # --+-------- # 1  相沢 # 2  飯田 # 3  上井 # # ・操作 # INSERT INTO table(id, value) values # (NULL, '遠藤'), (NULL, '岡田'); # # ・欲しい結果 # 4 # 5 # # ・説明 # ID列をauto_incrementにしているのですが、要素を追加したときに # そのIDを取得したいと考えています。どのようにしたらいいでしょうか? # # 'ID列をauto_incrementにしているのですが、要素を追加したときにそのIDを取得するには'(table,ID) :- auto_increment(TABLE,VALUEs,ID). auto_increment(_表,_値ならび,_付加されるID) :-     length(_値ならび,Len),     length(L,Len),         P =.. [_表,ID0|L],     findmax(ID0,P,Max),     _付加されるID is Max + 1,     Q =.. [_表,_付加されるID|_値ならび],     assertz(Q),!. auto_increment(_表,_値ならび,1) :-     Q =.. [_表,1|_値ならび],     assertz(Q),!. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1274827528/229 # # [1] 授業単元:データベース論 # [2] 問題文(含コード&リンク):サンプルデータから情報を取りだしその情報をstudents.txtとして出力するプログラムを組め # Students.txtの例は以下の通り # 1 tanaka A # 2 sano B # 3 hori C # # サンプルデータから情報を取りだしその情報をstudents.txtとして出力する :- サンプルデータから情報を取りだし(_サンプル情報ならび), その情報をstudents.txtとして出力する(_サンプル情報ならび). サンプルデータから情報を取りだし(_サンプル情報ならび) :- count(サンプルデータ(_,_,_),_総情報数), _標本数 is _総情報数 // 20, findall([ID,_名前,_生徒情報],( for(1,N,_標本数), ID is (random mod _総情報数) + 1, サンプルデータ(ID,_名前,_生徒情報)), _サンプル情報ならび). その情報をstudents.txtとして出力する(_サンプル情報ならび) :- tell('students.txt'), append(_,[_サンプル情報|_残りならび],_サンプル情報ならび), 行表示文字列を構成して(_サンプル情報,_行表示文字列), 出力する(_行表示文字列), _残りならび = [], told. 行表示文字列を構成して(_値ならび,_行表示文字列) :- concat_atom(_値ならび,' ',_行表示文字列). 出力する(_行表示文字列) :- write_formatted('%t\n',[_行表示文字列]). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/39 # # # maindata # ----------------------------- # main_id | main_name | junle # ----------------------------- # 1000001 | aaaaaaaaa | 1 # 1000002 | bbbbbbbbb | 2 # 1000003 | ccccccccc | 1 # 1000004 | ddddddddd | 3 # 1000005 | eeeeeeeee | 1 # # itemdata # -------------------- # item_id | item_name # -------------------- # 9000001 | AAAAAAAAA # 9000002 | BBBBBBBBB # 9000003 | CCCCCCCCC # 9000004 | DDDDDDDDD # 9000005 | EEEEEEEEE # # itemlist # ------------------ # main_id | item_id # ------------------ # 1000001 | 9000001 # 1000001 | 9000004 # 1000002 | 9000002 # 1000002 | 9000005 # 1000004 | 9000002 # 1000004 | 9000004 # 1000004 | 9000005 # # という3つのテーブルがある場合に、maindata.junle='1'を条件に # main_id | main_name | itemlists # ---------------------------------------------------- # 1000001 | aaaaaaaaa | AAAAAAAAA DDDDDDDDD # 1000003 | ccccccccc | # 1000004 | eeeeeeeee | BBBBBBBBB DDDDDDDDD EEEEEEEEE # ---------------------------------------------------- # ※itemlistsは空白で連結 # # という結果を求めたいと思います。 # サブクエリを利用して一度に求めることは可能でしょうか? # それとも、アプリケーション側でループの際に都度itemlistsを生成する必要がありますでしょうか? # 'main_id | main_name | itemlists'(_main_id,_main_name,_itemlists) :- findsetof([_main_id,_main_name],( _junle='1', maindata(_main_id,_main_name,_junle)), L), member([_main_id,_main_name],L), findall(_item_name,( itemlist(_main_id,_item_id), itemdata(_item_id,_item_name)), _itemlists_1), concat_atom(_itemlists_1,' ',_itemlists). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1274791771/29 # # まったくわからないのです教えてください・・ # # 1、名前はわかっているが、コードが不明な商品の受注明細を照会するSELECT文を記述せよ。 # 副照会:商品名からコードを求めるSELECT文 # 主照会:商品コードから商品の受注明細を照会するSELECT文 # # 2、平均受注個数を超える商品に仕入れ先を照会するSELECT文を記述せよ。 # 副照会:商品の平均受注個数を求めるSELECT文 # 主照会:商品コード別に受注個数合計を求め、受注個数合計 > 平均受注個数であれば、仕入れ先を表示 # # 3、1月と2月に\50,000以上の注文があった顧客からの3月受注額を照会するSELECT文を記述せよ。 # 副照会:4月と5月に受注額合計が共に50000以上であるという条件をみたす顧客を照会 # 主照会:顧客別に6月の受注額合計を求めるSELECT文。 # # よろしくお願いいたします・ # 名前はわかっているが、コードが不明な商品の受注明細を照会する(_商品名,_受注明細) :- 商品名(_商品コード,_商品名), 受注明細(_顧客コード,_扱店コード,_受注日,_納品予定日,_商品コード,_荷姿,_数量,_単価,_金額,_入力時刻). '1月と2月に50,000以上の注文があった顧客からの3月受注額を照会する'(_顧客コード,_受注額) :- '1月と2月に50,000以上の注文があった顧客'(_顧客コード), findsum(_金額,(受注明細(_顧客コード,_,_受注日,_,_,_,_,_,_金額,_),sub_atom(_受注日,4,2,_,'03')),_受注額). '1月と2月に50,000以上の注文があった顧客'(_顧客コード) :- '1月に50000以上の注文があった顧客'(_1月に50000以上注文があった顧客コードならび), '2月に50000以上の注文があった顧客'(_2月に50000以上注文があった顧客コードならび), 積集合(_1月に50000以上注文があった顧客コードならび,_2月に50000以上注文があった顧客コードならび,_1月と2月に50000以上の注文があった顧客コードならび), member(_顧客コード,_1月と2月に50000以上の注文があった顧客コードならび). '1月に50000以上の注文があった顧客'(_1月に50000以上注文があった顧客コードならび), findsetof(_顧客番号,(受注明細(_顧客コード,_,_受注日,_,_,_,_,_,_金額,_),sub_atom(_受注日,5,2,'01')),_1月に注文があった顧客コードならび), findall(_顧客番号,( findsum(_金額,( member(_顧客番号,_1月に注文があった顧客コードならび), 受注明細(_顧客コード,_,_受注日,_,_,_,_,_,_金額,_), sub_atom(_受注日,4,2,_,'01')), _合計金額), _合計金額 > 50000), _1月に50000以上注文があった顧客コードならび),!. '2月に50000以上の注文があった顧客'(_2月に50000以上注文があった顧客コードならび), findsetof(_顧客番号,(受注明細(_顧客コード,_,_受注日,_,_,_,_,_,_金額,_),sub_atom(_受注日,5,2,'02')), _2月に注文があった顧客コードならび), findall(_顧客番号,( findsum(_金額,( member(_顧客番号,_2月に注文があった顧客コードならび), 受注明細(_顧客コード,_,_受注日,_,_,_,_,_,_金額,_), sub_atom(_受注日,4,2,_,'02')), _合計金額), _合計金額 > 50000), _2月に50000以上注文があった顧客コードならび),!. /* 平均受注個数を超える商品に仕入れ先を照会する(_商品コード,_顧客コード) :- 商品ごとの平均受注個数を調べる(_商品ごとの平均受注個数ならび), 平均受注個数を超える商品に仕入れ先を照会する(_商品ごと平均受注個数ならび,_商品コード,_顧客コード). 商品ごとの平均受注個数を調べる(_商品ごとの平均受注個数ならび) :- findall(_商品コード,商品名(_商品コード),_商品コードならび), findsetof([_顧客番号,_商品コード], 受注明細(_顧客コード,_,_,_,_商品コード,_,_,_,_,_), _顧客コード・商品コードならび), 荷姿変換(_荷姿,_数量,_数量_1,_単価,_単価_1,_金額,_金額_1), 荷姿変換(_荷姿,_数量,_数量,_単価,_単価,_金額,_金額) :- つまり荷姿変換は行わない. つまり荷姿変換は行わない. */ % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/960 # # ID|A|B|C| # --------- # 1 |1|2|3| # 2 |3|4|5| # 3 |7|8|9| (テーブルFOO) # # select FOO.ID,FOO.C from FOO,(select 1 AS EXPR) AS A # where FOO.A = A.EXPR or FOO.B = A.EXPR or FOO.C = A.EXPR; # # こんなかんじで得たCの内容を1のところにセットして # 該当するIDとCを全てリストアップするSQLはどう書けばよいでしょうか? # MySQL 5.0.67です。ストアドの作成権限はないです。 # # 'A,B,Cいずれかに1がある行の1のところにCをセットした行'(ID,A1,B1,C) :-     'FOO'(ID,A,B,C),     '1のところをCの値に置換'(A,B,C,A1,B1). '1のところをCの値に置換'(A,B,1,A,B) :- !. '1のところをCの値に置換'(1,1,C,C,C) :- !. '1のところをCの値に置換'(1,B,C,C,B) :- !. '1のところをCの値に置換'(A,1,C,A,C) :- !. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 'A,B,Cいずれかに1がある行の1のところにCをセットした行'(ID,A1,B1,C) :-     'FOO'(ID,A,B,C),     '1のところをCの値に置換'(A,B,C,A1,B1). '1のところをCの値に置換'(A,B,1,A,B) :- !. '1のところをCの値に置換'(1,B,C,C,B1) :- '1のところをCの値に置換の一'(C,B,C,C,B1),!. '1のところをCの値に置換'(A,1,C,A1,C) :- '1のところをCの値に置換の一'(A,C,C,A1,C),!. '1のところをCの値に置換の一'(1,B,C,C,B1) :- '1のところをCの値に置換の一'(C,B,C,C,B1),!. '1のところをCの値に置換の一'(A,1,C,A1,C) :- '1のところをCの値に置換の一'(A,C,C,A1,C),!. '1のところをCの値に置換の一'(A,B,C,A,B). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/944 # # num0からnum50までの連番でフィールドがあるのですが、 # この中で、レコードの値が0より大きいものをSELECTするにはどうしたらいいでしょうか? # ワイルドカード的な書き方はないのでしょうか? 'num0からnum50までの連番でフィールドの中で0より大きいものを選択'(L) :- フィールド名の連番を作る(_フィールド名ならび), 選択項を変数引数で構成し(_選択項,_引数ならび), call(P), findall([_フィールド名,_値], フィールドの中で0より大きいもの(_フィールド名ならび,_引数ならび,_フィールド名,_値), L). フィールドの中で0より大きいもの(_フィールド名ならび,L2,_フィールド名,_値) :- for(1,M,51), list_nth(M,L2,_値), _値 > 0, list_nth(M,_フィールド名ならび,_フィールド名). フィールド名の連番を作る(_フィールド名ならび) :- findall(S,(for(0,N,50),concat_atom([num,N],S)),_フィールド名ならび). 選択項を変数引数で構成し(_選択項,_変数ならび) :- length(_変数ならび,51), _選択項 =.. [テーブル|_変数ならび]. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/933 # # DEFENDANT  GUILT  JOROR # -----------+-------+-------- # HOGE      | 1     | FOO # HOGE      | 0     | BAR # HOGE      | 1     | BAZ # FUGA     | 1     | FOO # FUGA     | 1     | BAR # FUGA     | 1     | BAZ     (T_JUDGEテーブル) # # 上記のテーブルにDEFENDANTで絞込をかけた結果、GUILTに一つでも0がある場合 # 1行も取得せず、全部1の場合はそのまま一覧を返す場合どのようなSQLを書けば # よいでしょうか?この場合、HOGEで絞り込むと0行、FUGAなら3行と言う具合です。 # # DBMSはMySQL5.0.67です。 # # 'T_JUDGEテーブル'('HOGE',1,'FOO'). 'T_JUDGEテーブル'('HOGE',0,'BAR'). 'T_JUDGEテーブル'('HOGE',1,'BAZ'). 'T_JUDGEテーブル'('FUGA',1,'FOO'). 'T_JUDGEテーブル'('FUGA',1,'BAR'). 'T_JUDGEテーブル'('FUGA',1,'BAZ'). 'T_JUDGEテーブルにDEFENDANTで絞込をかけた結果、GUILTに一つでも0がある場合1行も取得せず、全部1の場合はそのまま一覧を返す'(_DEFENDANT,_GUILT,_JOROR) :- findsetof(_DEFENDANT,('T_JUDGEテーブル'(_DEFENDANT,_GUILT,_JOROR),\+(_GUILT=0)),L1), findsetof(_DEFENDANT,('T_JUDGEテーブル'(_DEFENDANT,_GUILT,_JOROR),_GUILT=0),L2), 差集合(L1,L2,L3), member(_DEFENDANT,L3), T_JUDGEテーブル(_DEFENDANT,_GUILT,_JOROR). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/922 # # 売上データベースがあって、主テーブルの項目は、売上番号、得意先名、日付。 # 明細テーブルの項目は、明細番号、売上番号、商品、個数。売上番号で1対多でリンクしています。 # 商品(複数)と日付を指定して、 商品名 個数計 得意先計の一覧を出力したいです。 # ただし得意先名は同名を1とカウントしたいのです。 # SELECT 明細.商品, Sum(明細.個数) AS 個数計, Count(主.得意先) AS 得意先計 # FROM 主 INNER JOIN 明細 ON 主.売上番号 = 明細.売上番号 # WHERE 主.日付 Between '5/1/2010' And '5/4/2010' # GROUP BY 明細.商品 # HAVING 明細.商品='えんぴつ' or 明細.商品='筆'; # とすると、得意先計が複数カウント(同名は1とならない)してしまいます。 # どのように書いたらよいのでしょうか。 # '商品(複数)と日付を指定して、 商品名 個数計 得意先計の一覧を出力する'(_商品ならび,_日付下限,_日付上限,X) :- findall([_商品,_個数,_得意先名],(主(_売上番号,_得意先名,_日付),明細(_明細番号,_売上番号,_商品,_個数),member(_商品,_商品ならび),_日付@>=_日付下限,_日付@=<_日付上限),_選択ならび), findsetof([_商品,_得意先名],member([_商品,_個数,_得意先名],_選択ならび),_鍵ならび), findall([_商品,_個数計,_得意先名],(member([_商品,_得意先名],_鍵ならび),findsum(_個数,member([_商品,_個数,_得意先名],_選択ならび),_個数計)),X). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/912 # # 文章の中に特定キーワードがあるかどうかを探し、一致した場合そのキーワードを取得する # SQLを作成したいのですが、(たとえるなら逆LIKEのようなイメージ)上手くいきません。 # # テーブル名:T_DIC(InnoDB,UTF-8) # KEYWORD # ------- # 'ぬるぽ' # 'めるぽ' # 'nullpo' # # これに対し、'お前の母ちゃんぬるぽ!nullpo!'のキーワードに対する応答を下記のようにしたいのです。 # # KEYWORD # ------- # 'ぬるぽ' # 'nullpo' # # MySQL 5.0.67です。宜しくお願いします。 # # 文章の中に特定キーワードがあるかどうかを探し、一致した場合そのキーワードを取得する(_文章,_文章の中に含まれたキーワードならび) :- findall(KEYWORD,('T_DIC'(KEYWORD),文章の中にキーワードを含む(_文章,KEYWORD)),_文章の中に含まれたキーワードならび). 文章の中にキーワードを含む(_文章,KEYWORD) :- sub_atom(_文章,_,_,_,KEYWORD),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/908 # # MySQL 5.1 # # TEAMが1 で、 # NAMEにaを含むデータを上位にして、 # SCOREの多い順に取り出したいのですが、 # どう書けばいいですか?お願いします。 # # これを # ID|TEAM|NAME|SCORE # --+----+----+----- # 1 | 1  | aaa | 200 # 2 | 2  | abb | 50 # 3 | 1  | ccc | 300 # 4 | 1  | daa | 400 # 5 | 1  | eae | 100 # 6 | 1  | fff  | 800 # # ↓こうしたい # ID|TEAM|NAME|SCORE # --+----+----+----- # 4 | 1  | daa | 400 # 1 | 1  | aaa | 200 # 5 | 1  | eae | 100 # 6 | 1  | fff  | 800 # 3 | 1  | ccc | 300 # 'TEAMが1でSCOREの多い順に取り出したい'(_SCOREの多い順ならび) :- 'TEAMが1でNAMEにaを含むデータを上位にして'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ), 'SCOREの多い順に取り出したい'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ,_SCOREの多い順ならび),!. 'SCOREの多い順に取り出したい'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ,_SCOREの多い順ならび) :- 降順整列(_aを含む鍵付きデータ,_降順に整列したaを含む鍵付きデータ), 降順整列(_aを含まない鍵付きデータ,_降順に整列したaを含まない鍵付きデータ), 鍵を除去しながら結合する(_降順に整列したaを含む鍵付きデータ,_降順に整列したaを含まない鍵付きデータ,_SCOREの多い順ならび). 'TEAMが1でNAMEにaを含むデータを上位にして'(_aを含む鍵付きデータ,_aを含まない鍵付きデータ) :- findall([SCORE,ID,1,NAME,SCORE],(テーブル(ID,1,NAME,SCORE),'NAMEにaを含む(NAME)),_aを含む鍵付きデータ), findall([SCORE,ID,1,NAME,SCORE],(テーブル(ID,1,NAME,SCORE),\+('NAMEにaを含む'(NAME))),_aを含まない鍵付きデータ),!. 'NAMEにaを含む'(NAME) :- sub_atom(NAME,_,1,_,a),!. 鍵を除去しながら結合する([],[],[]) :- !. 鍵を除去しながら結合する([],Y,X) :- 鍵を除去しながら結合する(Y,[],X),!. 鍵を除去しながら結合する([[_|L]|R1],Y,[L|Z]) :- 鍵を除去しながら結合する(R1,Y,Z). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/889 # # 質問です。DBMSはOracle10gです。 # # ユニークな数値IDをキーとしたテーブルがあります。 # IDは連続した値にはなりません。 # # ID | hoge # ----+--------- # 001 | aaa # 003 | bbb # 047 | ccc # 084 | ddd # 120 | eee # 401 | fff # 645 | ggg # # IDは1000万まで取り得ます。 # ここから、1〜1000万までの間で、テーブルに存在しないIDのみを取り出すには # どのように書いたら良いでしょうか? # # 1〜1000万までのIDを埋めた別テーブルと外部結合して、 # 元テーブルのIDがnullのものを取るしかないかな・・・? # # '1〜1000万までの間で、テーブルに存在しないIDのみを取り出す'(ID) :- for(1,ID,10000000), \+(テーブル(ID,_)). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/877 # # T_USER T_HOGE T_MAG         T_USER # ID|NUM  ID      MAG             ID|NUM # --|---- --      --             --|---- # A | 100  A      100  .→→→    A | 300 # B | 100  A         update結果  B | 200 # C | 100  B                   C | 100 # # 「T_HOGE.IDがT_USER.IDと一致する数×T_MAG.MAG」の結果を # T_USER.NUMに対し加算するUPDATE文を書きたいのですが # どうすればよいでしょうか。IDはVARCHAR型です。 # DBMSはMySQL 5.1です。 # # '「T_HOGE.IDがT_USER.IDと一致する数×T_MAG.MAG」の結果をT_USER.NUMに対し加算するUPDATE文' :- '「T_HOGE.IDがT_USER.IDと一致する数×T_MAG.MAG」の結果をT_USER.NUMに対し加算するUPDATE文'(_), fail. '「T_HOGE.IDがT_USER.IDと一致する数×T_MAG.MAG」の結果をT_USER.NUMに対し加算するUPDATE文'. '「T_HOGE.IDがT_USER.IDと一致する数×T_MAG.MAG」の結果をT_USER.NUMに対し加算するUPDATE文'(ID) :- 'T_MAG'(MAG), retract('T_USER'(ID,NUM)), count('T_HOGE'(ID),Count), NUM2 is NUM + MAG * Count, assertz('T_USER'(ID,NUM2)). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/839 # # Table1 # |ID|Score|Div1|Div2| # |1 |0.2 |1 |1 | # |2 |0.3 |1 |2 | # |3 |0.4 |1 |3 | # |4 |0.2 |1 |4 | # |5 |0.1 |2 |1 | # |6 |0.3 |2 |3 | # # Table2 # |ID|Div1| # |1 |1 | # |1 |2 | # |1 |3 | # |2 |2 | # # # こういう構成で、約2000万行のTable1と約100万行のTable2について # 1.Select Div1, Score From Table Where Div2 = 2 or Div2 = 4; # 2.Select Div1, Score From Table Where Div2 = 5 or ... or Div2 = 9; # : # : # N.・・・・; # このようなN個のクエリを発行し、 # 得られる全ての結果から共通するDiv1の値を含む行のみを抽出、 # 得られた共通するDiv1の値を使ってTable2にjoinし、 # Table2のIDごとのScoreの合計値を取得したいのです。 # (Score値が複数回加算されるのは仕様です) # # 手続き的に処理をしているのですが、どうにも遅く # 一回のSQLで素早く取得する方法はありませんでしょうか。 # # どうかお願い致します。 # 'ルール1~N全てに解が存在するID'(_Div2,_ルールならび,X) :- 'ルール1~N全てに解が存在するID'(0,_Div2,_ルールならび,X), abolish('_Div1_temp'/2). 'ルール1~N全てに解が存在するID'(N,_,[],X) :- findall(_Div,'_Div1_temp(_Div,N),X). 'ルール1~N全てに解が存在するID'(N,_Div2,[_ルール|R],X) :- 'ルール1~N全てにとして存在するID'(N,_Div2,_ルール). 'ルール1~N全てに解が存在するID'(N,_Div2,[_ルール|R],X) :- N2 is N + 1, 'ルール1~N全てに解が存在するID'(N,_Div2,R,X). 'ルール1~N全てに解として存在するID'(0,_Div2,_ルール) :- 'Table1'(_ID,_Score,_Div1,_Div2), call(_ルール), \+('_Div1_temp'(_Div1,1)), assertz('_Div1_temp'(_Div1,1)), fail. 'ルール1~N全てに解として存在するID'(N,_Div2,_ルール) :- N > 0, 'Table1'(_ID,_Score,_Div1,_Div2), call(_ルール), '_Div1_temp'(_Div1,N), N2 is N + 1, retract('_Div1_temp'(_Div1,N)), assertz('_Div1_temp'(_Div1,N2)), fail. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/823 # # mysql 5.1.38 # # table inputdaka # code int # inputdate date # data1 int # data2 int # # 指定された日(その日が存在しなければ直前の日付)及びその前日の # データを得る # # select inputdate,data1,data2 # from inputdaka # where code= 9999 # and # inputdate <= '2010-04-10' # order by inputdate desc limit 2; # # mysqlで、こう書きましたが、limitが使えないRDBでは # どうなるんですか? # '指定された日(その日が存在しなければ直前の日付)及びその前日のデータを得る'(_指定された日,_code,_inputdate,_data1,_data2) :- inputdaka(_code,_指定された日,_data1,_data2), _inputdate = _指定された日,!. '指定された日(その日が存在しなければ直前の日付)及びその前日のデータを得る'(_指定された日,_code,_inputdate,_data1,_data2) :- 前日(_指定された日,_前日), inputdaka(_code,_前日,_data1,_data2), _inputdate = _前日,!. '指定された日(その日が存在しなければ直前の日付)及びその前日のデータを得る'(_指定された日,_code,_inputdate,_data1,_data2) :- 前日(_指定された日,_前日), 前日(_前日,_前々日), inputdaka(_code,_前々日,_data1,_data2), _inputdate = _前々日,!. % 以下のサイトは # 出典 :: SQL質疑応答スレ 9問目 #817 # [テーブルA] # ID, AGE, GROUP # --- ---- ----- # 1 , 10, A # 2 , 20, A # 3 , 30, A # 4 , 20, B # 5 , 40, B # 6 , 60, B # 7 , 10, C # 8 , 30, C # 9 , 50, C # 10 , 70, C # # ↑のテーブルから、 # 各GROUP毎にAGEで順位付けした結果を取得したいです。 # # <結果> # # ID, AGE, GROUP, RANK # --- ---- ----- ----- # 1 , 10, A 1 # 2 , 20, A 2 # 3 , 30, A 3 # 4 , 20, B 1 # 5 , 40, B 2 # 6 , 60, B 3 # 7 , 10, C 1 # 8 , 30, C 2 # 9 , 50, C 3 # 10 , 70, C 4 # # # GROUP BYを使ってみたのですが、 # どうも見当違いのSQLになってしまって。。 # # すいませんが、どのようなSQLを書けばよいかご教示ください。 # テーブルA(8,30,'C'). テーブルA(4,20,'B'). テーブルA(1,10,'A'). テーブルA(10,70,'C'). テーブルA(2,20,'A'). テーブルA(9,50,'C'). テーブルA(6,60,'B'). テーブルA(7,10,'C'). テーブルA(3,30,'A'). テーブルA(5,40,'B'). '各GROUP毎にAGEで順位付けした結果を取得'(X) :- 'GROUPならび'(_GROUPならび), '各GROUP毎にAGEで順位付けした結果を取得'(_GROUPならび,X). 'GROUPならび'(_GROUPならび) :- setof(_GROUP,[_ID,_AGE,_GROUP] ^ テーブルA(_ID,_AGE,_GROUP),_GROUPならび). '各GROUP毎にAGEで順位付けした結果を取得'([],[]) :- !. '各GROUP毎にAGEで順位付けした結果を取得'(_GROUPならび,X) :- '各GROUP毎にAGEで順位付けした結果を取得して行く'(_GROUPならび,X). '各GROUP毎にAGEで順位付けした結果を取得して行く'([_GROUP|R1],X) :- '各GROUP毎にAGEで順位付けした'(_GROUP,L4), '各GROUP毎にAGEで順位付けした結果を取得'(R1,Y), append(L4,Y,X). '各GROUP毎にAGEで順位付けした'(_GROUP,L4) :- '_GROUPのデータの_AGEを整列鍵に'(_GROUP,L2), '整列し_AGEで順位付けした'(L2,L4). '_GROUPのデータの_AGEを整列鍵に'(_GROUP,L2) :- findall([_AGE,_GROUP,_ID],テーブルA(_ID,_AGE,_GROUP),L2). '整列し_AGEで順位付けした'(L2,L4) :- 整列(L2,L3), 'GROUP内の順位づけ'(1,L3,L4). 'GROUP内の順位づけ'(_,[],[]) :- !. 'GROUP内の順位づけ'(N,[[_AGE,_GROUP,_ID]|R1],[[_ID,_AGE,_GROUP,N]|R2]) :- N2 is N + 1, 'GROUP内の順位づけ'(N2,R1,R2). 整列(L1,L2) :- 先頭要素を軸要素として重複要素を許すクイックソート(L1,L2). 先頭要素を軸要素として重複要素を許すクイックソート([],[]). 先頭要素を軸要素として重複要素を許すクイックソート([_軸要素|L1],L2) :- 軸要素に対する大小で二つのならびに分割する(_軸要素,L1,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび), 先頭要素を軸要素として重複要素を許すクイックソート(_軸要素と等しいかより小さい要素のならび,L2_1), 先頭要素を軸要素として重複要素を許すクイックソート(_軸要素より大きい要素のならび,L2_2), append(L2_1,[_軸要素|L2_2],L2). 軸要素に対する大小で二つのならびに分割する(_,[],[],[]). 軸要素に対する大小で二つのならびに分割する(_軸要素,[_要素|_残りならび],[_要素|_軸要素と等しいかより小さい要素のならび],_軸要素より大きい要素のならび) :- _軸要素 @>= _要素, 軸要素に対する大小で二つのならびに分割する(_軸要素,_残りならび,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび). 軸要素に対する大小で二つのならびに分割する(_軸要素,[_要素|_残りならび],_軸要素と等しいかより小さい要素のならび,[_要素|_軸要素より大きい要素のならび]) :- _軸要素 @< _要素, 軸要素に対する大小で二つのならびに分割する(_軸要素,_残りならび,_軸要素と等しいかより小さい要素のならび,_軸要素より大きい要素のならび). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/796 # # ID|value|日付    |etc # 01|100 |2010/4/5|10 # 01|150 |2010/4/6|20 # 02|100 |2010/4/5|30 # 02|160 |2010/4/6|40 # # 各ID、特定の日にち2010/4/6のvalueから1日前のvalueを引いた値をdiff列に出力 # ついでに2010/4/6のetcを出力 # # ID|diff |日付   |etc # 01|50 |2010/4/6|20 # 02|60 |2010/4/6|40 # # お願いします! # 使う必要のある文法?のヒントだけでも、教えていただければ有り難いです。 # # '各ID、特定の日にちのvalueから1日前のvalueを引いた値をdiff列に出力、ついでに特定の日にちのetcを出力'(ID,_特定の日にち) :- 前日・今日(_前日,_特定の日にち), 見出し出力, 'Id,value,日付,etc'(_ID,_value,_特定の日にち,_etc). 前日のvalue(_ID,_前日,_前日のvalue), _diff is _value - _前日のvalue, write_formatted('%t | %t | %t | %t\n',[_ID,_diff,_特定の日にち,_etc]), fail. '各ID、特定の日にちのvalueから1日前のvalueを引いた値をdiff列に出力、ついでに特定の日にちのetcを出力'(_,_). 見出し出力 :- write('ID | diff | 日付 | etc\n'). 前日のValue(_ID,_前日,_前日のvalue) :- 'Id,value,日付,etc'(_ID,_前日のvalue,_前日,_),!. 前日のValue(_,_,0). % 前日・今日/2の定義は http://nojiriko.asia/prolog/t815.html を参照してください。 % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/789 # # [TABLE1] # # key1 key2 data # ------------------------------------ # AAA 01 zzz # AAA 02 yyy # BBB 01 xxx # BBB 03 www # CCC 02 vvv # DDD 03 uuu # # # # [TABLE2] # key1 data # ------------------------------------ # MMM 01&02 # NNN 01only # OOO 02only # # # このようなテーブルから、以下のデータを抽出したいです。 # # # # key1 key2 data1 data2 # --------------------------------------------- # AAA 01 zzz 01&02 # BBB 01 xxx 01only # CCC 02 vvv 02only # # # TABLE1のKEYはkey1とkey2です。 # このTABLE1から、各key1に対して一意にデータを抽出します。 # 抽出はkey2の値が01と02のもののみを対象とし、 # 01があれば01のデータを、なければ02のデータを引っ張ってきます(data1)。 # # さらに、各key1におけるkey2の状況?をdata2として付加したいです。 # ここではTABLE2に格納されていることにしましたが、 # 条件文で単に文字列を設定するのでも構いません。 # # SQLServer2000を使用します。 # どのようなSQLを書けばよいでしょうか? # よろしくお願いします。 # # 'TABLE1から、各key1に対してkey2の値が01と02のもののみを対象とし、01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加してTABLE2に追加して出力' :- findsetof(_key1,('TATLE1'(_key1,_key2,_data),key2の対象は01か02のみ(_key2)),L1), 見出し, member(_key1,L1), '01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加'(_key1,L2), write_formatted('%t %t %t %t\n',L2), fail. 'TABLE1から、各key1に対してkey2の値が01と02のもののみを対象とし、01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加してTABLE2に追加して出力'. key2の対象は01か02のみ('01') :- !. key2の対象は01か02のみ('02') :- !. '01があれば01のデータを、なければ02のデータを抽出し各key1におけるkey2の状況をdata2として付加'(_key1,X) :- findall([_key1,_key2,_data],'01があれば01のデータを、なければ02のデータを抽出し'(_key1,_key2,_data),L), 各key1におけるkey2の状況(L,X), X = [_,_,_,TABLE2data], assertz('TABLE2'(_key1,TABLE2data)),!. '01があれば01のデータを、なければ02のデータを抽出し'(_key1,'01',_data) :- 'TABLE1'(_key1,'01',_data). '01があれば01のデータを、なければ02のデータを抽出し'(_key1,'02',_data) :- 'TABLE1'(_key1,'02',_data). 各key1におけるkey2の状況([[_key1,'01',_data]],[_key1,'01',_data,'01only']) :- !. 各key1におけるkey2の状況([[_key1,'02',_data]],[_key1,'02',_data,'02only']) :- !. 各key1におけるkey2の状況([[_key1,'01',_data],[_key1,'02',_]],[_key1,'01',_data,'01&02']) :- !. 各key1におけるkey2の状況([[_key1,'02',_],[_key1,'01',_data]],[_key1,'01',_data,'01&02']) :- !. 見出し :- write('key1 key2 data1 data2 \n'-----------------------------------\n'). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/776 # # 例えば、都道府県名が保存してあるフィールドに # 温泉万歳北海道編 など、どこかに都道府県名が入っているかもしれない # 文字列を与え、その文字列に都道府県名が入っているかどうかを # 判断させることってできますか? # # '例えば、都道府県名が保存してあるフィールドに温泉万歳北海道編など、どこかに都道府県名が入っているかもしれない文字列を与え、その文字列に都道府県名が入っているかどうかを判断させる'(_文字列) :- 都道府県名(_都道府県名), sub_atom(_文字列,_,_,_,_都道府県名). 都道府県名(北海道). 都道府県名(青森県). 都道府県名(岩手県). 都道府県名(宮城県). 都道府県名(秋田県). 都道府県名(山形県). 都道府県名(福島県). 都道府県名(茨城県). 都道府県名(栃木県). 都道府県名(群馬県). 都道府県名(埼玉県). 都道府県名(千葉県). 都道府県名(東京都). 都道府県名(神奈川県). 都道府県名(新潟県). 都道府県名(富山県). 都道府県名(石川県). 都道府県名(福井県). 都道府県名(山梨県). 都道府県名(長野県). 都道府県名(岐阜県). 都道府県名(静岡県). 都道府県名(愛知県). 都道府県名(三重県). 都道府県名(滋賀県). 都道府県名(京都府). 都道府県名(大阪府). 都道府県名(兵庫県). 都道府県名(奈良県). 都道府県名(和歌山県). 都道府県名(鳥取県). 都道府県名(島根県). 都道府県名(岡山県). 都道府県名(広島県). 都道府県名(山口県). 都道府県名(徳島県). 都道府県名(香川県). 都道府県名(愛媛県). 都道府県名(高知県). 都道府県名(福岡県). 都道府県名(佐賀県). 都道府県名(長崎県). 都道府県名(熊本県). 都道府県名(大分県). 都道府県名(宮崎県). 都道府県名(鹿児島県). 都道府県名(沖縄県). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/751 # # # 年月日と金額を持ったテーブルがあります。前年度合計と今年度合計を出したいのですが、 # # 年月日 金額 # 20080402 200 # 20080404 200 # 20090401 100 # 20090401 500 # 20090404 300 # # とあった場合、↓にしたいです # # 年月日 今年度合計 前年度合計 # 20090401 600 0 # 20090402 0 200 # 20090404 300 200 # # 両年度金額が無い場合は表示無しで、年月日は8桁の数値型です。 # うるう年は考慮しなくて構いません。 年月日と金額を持ったテーブルがあります。前年度合計と今年度合計を出したいのですが :- 初めに重複しない年月日ならびを取り出します(_重複しない年月日ならび), 見出しです, 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して表示します(_重複しない年月日ならび). 初めに重複しない年月日ならびを取り出します(_重複しない年月日ならび) :- findsetof(_年月日,テーブル(_年月日,_),_重複しない年月日ならび). 見出しです :- write_formatted('%8s %10s %10s\n',[年月日,今年度合計,前年度合計]). 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して表示します([]) :- !. 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して表示します([_年月日|R]) :- _前年同日 is _年月日 - 10000, ある年月日の金額合計(_年月日,_今年度合計), その前年同日の金額合計(_前年同日,_前年度合計), 年月日と今年度合計と前年度合計を表示します(_年月日,_今年度合計,_前年度合計), 重複しない年月日ならびから順に年月日を取り出し今年度合計と前年度合計を計算して表示します(R). ある年月日の金額合計(_年月日,_金額合計) :- findsum(_金額,(テーブル(_年月日,_金額),_金額合計). その前年同日の金額合計(_前年同日,_前年同日金額合計) :- findsum(_前年同日金額,(テーブル(_前年同日,_前年同日金額),_前年同日金額合計). 年月日と今年度合計と前年度合計を表示します(_年月日,_今年度合計,_前年度合計) :- write_formatted('%t %10.0f %10.0f\n',[_年月日,_今年度合計,_前年度合計]). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/713 # # # A B C # - - - # 1 3 a # 1 5 b # 2 8 c # 2 4 d # 2 6 e # 3 3 f # 3 1 g # # 上記のようなSAMPLEテーブルがあるとき、 # AごとにBが最大となるレコードのCを得たい、 # つまり、抽出結果を下記のようにしたいと考えています。 # # A C # - - # 1 b # 2 c # 3 f 'SAMPLE'('1','3','a'). 'SAMPLE'('1','5','b'). 'SAMPLE'('2','8','c'). 'SAMPLE'('2','4','d'). 'SAMPLE'('2','6','e'). 'SAMPLE'('3','3','f'). 'SAMPLE'('3','1','g'). 'AごとにBが最大となるレコードのCを得る'(X,Y) :- findsetof(A,'SAMPLE'(A,_,_),L), member(A,L), findmax([B,A,C],'SAMPLE'(A,B,C),[_,X,Y]). findsetof(A,B,C) :- findall(A,B,L), setof(A,member(A,L),C). findmax(A,P,X) :- findall(A,P,L), sort(L,L2), last(L2,X). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/688 # # <生徒テーブル> # 生徒ID, 生徒名称, クラスID, 好きな教科ID, # 1, 鈴木, A, 1 # 2, 田中, B, 1 # 3, 佐藤, c, 2 # # <教科テーブル> # 教科ID, 教科名称 # 1, 国語 # 2, 数学 # 3, 理化 # # <クラステーブル> # クラスID, クラス名称 # a, Aクラス # b, Bクラス # c, Cクラス # # 上記2つのテーブルから、 # 各教科でクラス毎に何人が好きな教科としているか以下のような形で取得します。 # # 教科, Aクラス内での人数, B〜, C〜, … # 国語, 1, 1, 0, … # 数学, 0, 0, 1, … # 理化, 0, 0, 0, … # 各教科でクラス毎に何人が好きな教科としているか(_好きな教科の人数一覧) :-    findall(_クラスID,クラステーブル(_クラスID,_),_クラスIDならび),    findall(_教科ID,教科テーブル(_教科ID,_),_教科IDならび),    findall([_教科ID_2,_クラスID_2,_人数],           ( member(_教科ID_2,_教科IDならび),            member(_クラスID_2,_クラスIDならび),            count(生徒テーブル(_,_,_クラスID_2,_教科ID_2),_人数)),        _好きな教科表一覧). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/631 # # MYSQL使ってます。 # id キーワード # 1 りんご # 2 みかん # 3 りんご # のようにDBに登録されてるキーワードが多い順に例えばヒット件数トップ10のキーワードを # 抜き出したいのですがどのように書いたらいいでしょうか? # 件数少ないうちは今までにないキーワードがでたら全検索で数えるって繰り替えそうと思ったんですけど、 # 件数多くなったら効率的に書かないとまずいかなと思いまして。 キーワード数の上位10位までを表示 :- findall([M,N],カウンタカウンタ(M,N),L1), sort(L1,L2), reverse(L2,L3), 上位10位まで(L3,L), キーワード数の上位10位までを表示(L). キーワード数の上位10位までを表示([]) :- !. キーワード数の上位10位までを表示([M|R]) :- キーワードカウンタ(_キーワード,M), キーワード表示(_キーワード), fail. キーワード数の上位10位までを表示(R). キーワード表示(_キーワード) :- キーワード(ID,_キーワード), write_formatted('%t,%t\n',[ID,_キーワード]). 上位10位まで([],_,[]) :- !. 上位10位まで(_,Count,[]) :- Count >= 10,!. 上位10位まで([[M,N]|R1],Count1,[M|R2]) :- Count2 is Count1 + N, 上位10位まで(R1,Count2,R2). キーワードカウンタを準備する :- abolish(キーワードカウンタ/2), キーワード(Id,_キーワード), キーワードカウンタ((+),_キーワード), fail. キーワードカウンタを準備する. キーワードカウンタ((+),_キーワード) :- retract(キーワードカウンタ(_キーワード,_現在のカウント)), _加算されたカウント is _現在のカウント + 1, カウンタカウンタの更新((-),_現在のカウント) カウンタカウンタの更新((+),_加算されたカウント), asserta(キーワードカウンタ(_キーワード,_加算されたカウント)),!. キーワードカウンタ((+),キーワード) :- asserta(キーワードカウンタ(_キーワード,1)), カウンタカウンタの更新((+),1),!. カウンタカウンタの更新((+),M) :- retract(カウンタカウンタ(M,N)), N2 is N + 1, asserta(カウンタカウンタ(M,N2)),!. カウンタカウンタの更新((+),M) :- asserta(カウンタカウンタ(M,1)). カウンタカウンタの更新((-),M) :- retract(カウンタカウンタ(M,N)), N1 is N - 1, asserta(カウンタカウンタ(M,N1)),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/613 # # <ユーザ情報テーブル> # ID,氏名,住所 # 1,ユーザ1,青森県〜〜〜 # 2,ユーザ2,青森県〜〜〜 # 3,ユーザ3,北海道〜〜〜 # 4,ユーザ4,宮城県〜〜〜 # 5,ユーザ5,岩手県〜〜〜 # ・・・ # <都道府県テーブル> # ID,都道府県 # 1,北海道 # 2,青森県 # 3,岩手県 # 4,宮城県 # 5,秋田県 # ・・・ # この2つのテーブルから、クエリを使用して、都道府県別のユーザ数を取得(カウント)したいのですが、教えていただけませんでしょうか? 上記の5レコードで説明しますと、以下のような結果が望みです。 # 都道府県,人数 # 北海道,1 # 青森県,2 # 岩手県,1 # 宮城県,1 # 秋田県,0 都道府県別のユーザ数一覧 :- write('都道府県,人数\n'), 都道府県別のユーザ数を取得(_都道府県,_人数), write_formatted('%t,%t\n',[_都道府県,_人数]), fail. 都道府県別のユーザ数一覧. 都道府県別のユーザ数を取得(_都道府県,_人数) :- 都道府県(_,_都道府県), count((ユーザ情報(_,_,住所),sub_atom(_住所,0,_,_,_都道府県)),_人数). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/602 # # MYSQLを使っています。 # SELECT * FROM aaa WHERE id = ● # この●の部分が複数ある場合、例えば 3,9,14,43,413,545のような場合に # 一度に結果を取り出したいのですが、どういう風にかけばいいでしょうか? # 他のテーブルにid_list = "3 9 14 43 413 545" # のように入っていているのですが # これをsplitしてid=3 id=9のようにして # SELECT * FROM aaa WHERE id = ●を繰り返すコードにしてるですが # 数増えたらとんでもないことになるじゃん・・・って気づきました。 # 'SELECT * FROM aaa WHERE id = ●'(IdList,ID,Data) :- split(IdList,[' '],L), aaa(ID,Data), member(ID,L). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/599 # # 以下のSQLで最新日の2000円以上の売上があった商品を抽出しているんですが、 # SELECT * FROM SALES WHERE uriage >= 2000 AND date = (select max(date) from SALES) # 「その商品の前回売上があった日の売上額」と「前回の売上と比べてどれだけ増えたのかの増加率」 # を出したい場合どうしたらいいでしょう? # # 商品ID(id) | 日付(date) | 売上額(uriage) | 前回売上額 | 売上増加率 # 3 | 1267714800 | 2500 | ????? | ????? # 4 | 1267714800 | 2800 | ????? | ????? # # [日付の形式はunixtimeで、データ登録の際は日付だけ変更させ、時間と秒は常に統一させています] # [mysql 5.1] # 前回売上との比較売上表(_年/_月/_日) :-     findall(_商品ID,(売上(_商品ID,_日付,_),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上のあった商品IDならび), sort(_売上のあった商品IDならび     member(_商品ID2,_売上のあった商品IDならび),     当日の売上金額計(_商品ID2,_年/_月/_日,_売上金額計),     前回売上があった日(_商品ID2,_日付,_前回売上があった日),     前回売上があった日の売上金額計(_商品ID2,_前回売上があった日,_前回売上があった日の売上金額計),     売上行表示(_商品ID2,_年/_月/_日,_売上金額計,_前回売上があった日の売上金額計),     fail. 前回売上との比較売上表(_,_,_). 前回売上があった日(_商品ID,_日付,_前回売上があった日) :-     localtime(_日付,_年1,_月1,_日1,_,_,_,_),     findmax(_年2/_月2/_日2,(売上(_商品ID,_日付2,_),localtime(_日付2,_年2,_月2,_日2,_,_,_,_),_年1/_月1,_日1 @> _年2/_月2/_日2),_前回売上があった日). 前回売上があった日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-     findsum(_売上金額,(売上(_商品ID,_日付2,_売上金額),localtime(_日付2,_年,_月,_日,_,_,_,_)),_売上金額計). 当日の売上金額計(_商品ID,_年/_月/_日,_売上金額計) :-     findsum(_売上金額,(売上(_商品ID,_日付,_売上金額),localtime(_日付,_年,_月,_日,_,_,_,_)),_売上金額計). 売上行表示(_商品ID,_年/_月/_日,_売上金額計,0.0) :-     write_formatted('%8d | %2d/%2d/%2d | %12.0f\n',[_商品ID2,_年/_月/_日,_売上金額計]),!. 売上行表示(_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計) :-     _売上増加率 is _売上金額計 / _前回売上のあった日の売上金額計,     write_formatted('%8d | %2d/%2d/%2d | %12.0f | %12.0f | %4.1f\n',[_商品ID,_年/_月/_日,_売上金額計,_前回売上金額計,_売上増加率]),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/594 # #(問) # ID | DATE     | DATA # --+----------+----- # 1 | 2007-11-11 | aaa # 2 | 2007-11-11 | bbb # 1 | 2007-11-10 | ccc # 3 | 2007-11-12 | ddd # 3 | 2007-11-11 | eee # 4 | 2007-11-10 | fff # 1 | 2007-11-12 | ggg # # このようなテーブルから、各idに対して最新の5件だけ抽出しなさい 各idに対して最新の5件だけ抽出する(_テーブル名,L) :-    functor(Q,_テーブル名,3),    重複を排除したidならびの抽出(ID,Q,L1),    整列(L1,L2),    findall(L3,(member(ID,L1),idに対して最新の5件だけ抽出する(ID,Q,L3)),L). idに対して最新の5件だけ抽出する(ID,Q,L) :-    目標Qの第一引数はID(ID,Q),    idに対して組ならびを抽出する(Q,L3),    最新の5件だけ抽出する(L3,L). idに対して組ならびを抽出する(Q,L3) :-    findall(L1,(call(Q),引数部分だけ抽出する(Q,L1)),L2),    整列(L2,L3),!. 重複を排除したidならびの抽出(ID,Q,L1) :- setof(ID,Q,L1). 目標Qの第一引数はID(ID,Q) :- arg(1,Q,ID),!.    引数部分だけ抽出する(Q,L1) :- Q =.. [_|L1]. 最新の5件だけ抽出する(L3,L) :-    length(L,5),    append(_,L,L3),!. 最新の5件だけ抽出する(L,L) :- !. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/521 # # 販売集計処理について教えてください。 # 商品テーブル # 商品名 販売本数 # ─── ──── # お菓子 # お弁当 # 飲み物 # # 販売履歴テーブル # 商品名 # ─── # 商品テーブルの各商品が、販売履歴テーブルに何件ずつあるかを集計し、 # 商品テーブルの販売本数に記録させたいと思っております(日次処理)。 販売履歴(飲み物). 販売履歴(お菓子). 販売履歴(お弁当). 販売履歴(お菓子). 販売履歴(お菓子). 販売履歴(飲み物). 販売履歴(お弁当). 販売履歴(お弁当). 販売集計処理 :-   一意な商品名ならびを得る(L),   商品テーブルに追加(L). 一意な商品名ならびを得る(L) :- setof(_商品名,販売履歴(_商品名),L). 商品テーブルに追加([]) :- !. 商品テーブルに追加([_商品名|R]) :-   count(販売履歴(_商品名),_販売本数),   assertz(商品(_商品名,_販売本数)),   商品テーブルに追加(R). 販売履歴(飲み物). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/474 # # SQL Server Compact 3.5 で、a_tbl と b_tbl のコードが一致した場合に # a_tbl に、b_tblの名前をセットするみたいなことしたいのですが無理ですか? # # UPDATE a_tbl # SET name = b_tbl.name # FROM b_tbl # WHERE a_tbl.no = b_tbl.no # # 実行すると、「FROM 句はこのクエリの種類では使用できません」ってエラーになります。 # SQL Server 2008 だと問題ないのですが・・・ # a_tbl(1,abc). a_tbl(2,add). b_tbl(1,uuu). b_tbl(2,jjj). 'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする' :-   a_tbl(_no,_name1),   b_tbl(_no,_name2),   update_a_tbl(_no,_name2),   fail. 'a_tbl と b_tbl のコードが一致した場合に a_tbl に、b_tblの名前をセットする'. update_a_tbl(_no,_name2) :-   retract(a_tbl(_no,_)),   assertz(a_tbl(_no,_name2)),   fail. update_a_tbl(_,_). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/344 # # ID | NAME | DATA # --+-------+----- # 1 | tanaka | aa # 2 | satou | bb # 3 | suzuki | cc # # 例えばこんなテーブルがあったときに # IDとNAMEに関してマッチするレコードを # 取得するとしたら # # WHERE ID = 1 AND NAME = 'tanaka' # # としますけど、マッチングの条件が複数あるときって # # WHERE (ID = 1 AND NAME = 'tanaka') OR (ID = 2 AND NAME = 'satou') # # こんなふうに単純に書くしかないでしょうか? # マッチング条件の対象列がひとつなら # # WHERE NAME in ('satou', 'suzuki') # # とできますが、複数列の場合にもこういうふうにまとめて書く方法がないかと思いまして・・・ # # テーブル(1,tanaka,aa). テーブル(2,satou,bb). テーブル(3,suzuki,cc). ?- テーブル(1,takaka,Z);テーブル(2,satou,Z). ?- findall([X,Y,Z],(member([X,Y],[[1,tanaka],[2,satou]]),テーブル(X,Y,Z)),L). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/330 # # ■テーブルデータ # ・IDテーブル   # ・マスターテーブル # 1, 2, 3      # 1, A # 1, 2, 4      # 2, A # 5, -1, -1     # 3, A # -1, 1, 2      # 4, B # 2, -1, 5      # -1, Z # # ■やりたいこと # マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 # 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード # だけクラス付で抽出する。 # ここで「同一クラスに属する」とは、クラスA, B, Zからなるグループに対して、 # Z以外の要素が一種類しか存在しない場合に、グループはそのクラスに属すると定める。 # 最終的に欲しいデータは # # 1, 2, 3, A # 5, -1, -1, B # -1, 1, 2, A # # となります。よろしくお願いします。 'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない' :- 'ID'(L), setof(U,(member(ID,L),マスター(ID,U),\+(U='Z')),[_クラス]), concat_atom(L,',',S), write_formatted('%t,%t\n',[S,_クラス]), fail. 'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/330 # # ■テーブルデータ # ・IDテーブル   # ・マスターテーブル # 1, 2, 3      # 1, A # 1, 2, 4      # 2, A # 5, -1, -1     # 3, A # -1, 1, 2      # 4, B # 2, -1, 5      # -1, Z # # ■やりたいこと # マスターテーブルを参照してIDテーブルの各IDにクラス(A, B, Z)を振り当て、 # 各レコードが同一クラスに属するか否かを判定し、同一クラスに属するレコード # だけクラス付で抽出する。 # ここで「同一クラスに属する」とは、クラスA, B, Zからなるグループに対して、 # Z以外の要素が一種類しか存在しない場合に、グループはそのクラスに属すると定める。 # 最終的に欲しいデータは # # 1, 2, 3, A # 5, -1, -1, B # -1, 1, 2, A # # となります。よろしくお願いします。 'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない' :- 'ID'(Id_1,Id_2,Id_3), マスター(Id_1,_クラス1), マスター(Id_2,_クラス2), マスター(Id_3,_クラス3), setof(U,(member(U,[_クラス1,_クラス2,_クラス3]),\+(U='Z')),[_クラス]), write_formatted('%t,%t,%t,%t\n',[Id_1,Id_2,Id_3,_クラス]), fail. 'クラスA, B, Zからなるグループに対して、Z以外の要素が一種類しか存在しない'. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/321 # # # スコアランキングで、自分の上下4人を含めた9人分の情報を取ってきたいのですが、どのようにすればよいでしょうか? # (自分が1位などの場合は自分と下位8人分を取得します) # スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_自分,L) :-   findall([_スコア,_氏名],スコア(_氏名,_スコア),L1),   sort(L1,L2),   reverse(L2,L3),   スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L). スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-   length(L1,4),   length(L2,4),   append(L1,[[_スコア,_自分]|L2],L),   append(_,L,_,L3),!. スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-   list_nth(N,L3,[_スコア,_自分]),   N < 4,   length(L,8),   append(L,_,L3),!. スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L3,L) :-   length(L,8),   append(_,L,L3),!. スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_スコア,_自分,L,L). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/321 # # # スコアランキングで、自分の上下4人を含めた9人分の情報を取ってきたいのですが、どのようにすればよいでしょうか? # (自分が1位などの場合は自分と下位8人分を取得します) # スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_自分,L) :-   findall([_スコア,_氏名],スコア(_氏名,_スコア),L1),   sort(L1,L2),   reverse(L2,L3),   append(L11,[[_スコア,_氏名]|L12],L3),   自分の最良の席を取る(L11,[_スコア,_自分],L12,L). 自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-   length(L12,Len2),Len2 =< 4,   Len1 is 9 - Len2 - 1,length(L1,Len1),   append(_,L1,L11),   append(L1,[[_スコア,自分]|,L12],L),!. 自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-   length(L11,Len1),Len1 =< 4,   Len2 is 9 - Len1 - 1,length(L2,Len2),   append(Len2,_,L12),   append(L11,[[_スコア,_自分]|L2],L),!. 自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :-   length(L1,4),length(L2,4),   append(_,L1,L11),   append(L2,_,L12),   append(L1,[[_スコア,_自分]|L2],L),!. 自分の最良の席を取る(L11,[_スコア,_自分],L12,L) :- append(L11,[[_スコア,_自分]|L12],L). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/321 # # # スコアランキングで、自分の上下4人を含めた9人分の情報を取ってきたいのですが、どのようにすればよいでしょうか? # (自分が1位などの場合は自分と下位8人分を取得します) # スコアランキングで、自分の上下4人を含めた9人分の情報を取る(_自分,L) :- findall([_スコア,_氏名],スコア(_氏名,_スコア),L1), sort(L1,L2), reverse(L2,L3), for(5,N,1), append(_,L,_,L3), length(L,9), member([_スコア,_自分],L), 自分の最良の席を取る(N,_自分,L). 自分の最良の席を取る(N,_自分,L) :- list_nth(N,L,[_,_自分]),!. 自分の最良の席を取る(N,_自分,L) :- M is 10-N, list_nth(M,L,[_,_自分]),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/241 # # SELECT した全レコードの特定カラムを文字列連結したものを得る方法はありますか? # # SELECT C FROM T # # とやったときに AAA、BBB、CCC といった値が得られる時、AAABBBCCC のような 1つの値が欲しいです。 # さらにそれらの間に任意の区切り文字を入れて AAA:BBB:CCC のような値を得ることはできるでしょうか。 'SELECTした全レコードのN番目カラムを文字列連結したものを得る'(T/_属性の数,N,_連結した文字列) :- length(L,_属性の数), P =.. [T|L]), findall(X,(call(P),list_nth(N,L,X)),_解ならび), concat_atom(_解ならび,_連結した文字列). % 以下のサイトは # 資格を有している職業は 登録名簿('001',山田). 登録名簿('002',鈴木). 職業に必要な資格(A,配管工) :- 資格(A,資格1). 職業に必要な資格(A,設計) :- 資格(A,資格3). 職業に必要な資格(A,内装) :- 資格(A,資格1), 資格(A,資格2). 資格('001',資格1). 資格('001',資格2). 資格('002',資格1). 資格を有している職業は(_氏名,_職業) :- 登録名簿(ID,_氏名), 職業に必要な資格(ID,_職業). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/314 # # ユーザーが複数の資格を持っているというありがちなテーブル構成があるのですが、 # 「資格1または資格2を持っているユーザー」の検索はできるのですが、 # 「資格1と資格2」を両方持っているユーザー」の検索ができません。 # # データベースはpostgresです。 # # テーブル構成はこんな感じです。 # # ユーザーテーブル # [ユーザーID、名前] # 001,山田 # 002,鈴木 # # 資格テーブル # [ユーザーID、資格] # 001,資格1 # 001,資格2 # 002,資格1 # ユーザーID('001',山田). ユーザーID('002',鈴木). 資格('001',資格1). 資格('001',資格2). 資格('002',資格1). '「資格1と資格2」を両方持っているユーザー'(X) :- setof(_名前,[_ユーザーID,_名前] ^ (資格(_ユーザーID,資格1),資格(_ユーザーID,資格2),ユーザーID(_ユーザーID,_名前)),X). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/212 # # # 【質問テンプレ】 # ・DBMS名とバージョン:MySQL 5.1 # ・テーブルデータ # # テーブルA # # A_ID PRIMARY # DATA1 # DATA2 # DATA3 # DATA4 # # テーブルB # # B_ID PRIMARY AUTO_INCREMENT # A_ID # MESSAGE # DATE # # ・欲しい結果 # テーブルAとテーブルBを結合し、以下のように表示させたいです。 # # A.A_ID (B.A_IDを参照し、テーブルBにあるMESSAGEを反映させたい) # A.DATA1 # A.DATA2 # A.DATA3 # A.DATA4 # B.MESSAGE (A.A_ID=B.B_IDと対応させ、NULLの場合はそのままNULLを表示、メッセージが存在する場合はDATEが最新の物のみ表示) # # ・説明 # 現在、LEFT JOINでテーブルAとテーブルBを結合した物を表示させ、 # テーブルBのMESSAGEにメッセージがあろうとNULLであろうと結合したテーブルの結果をすべて表示し、 # GROUP BY A.A_IDで、A.A_IDのエントリーは1つしか表示されないようにしているのですが、 # この状態だと、一番古いMESSAGEが表示されてしまいます。 sql_212 :- テーブルA(A_ID,DATA1,DATA2,DATA3,DATA4), テーブルB(B_ID,A_ID,MESSAGE,DATE), write_formatted('A.%t\nA.%t\nA.%t\nA.%t\n',[DATA1,DATA2,DATA3,DATA4]), fail. sql_212 :- findmax([DATE,MESSAGE],(テーブルA(A_ID),テーブルB(A_ID,_,MESSAGE,DATE)),[MaxDATE,MaxMESSAGE]), write_formatted('B.%t\n',[MaxMESSAME]), fail. sql_212. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/119 # # mysql 5.1.37 # # (問) # [groupテーブル] # group_id   | group_name # ---------+----------- # g1      | グループ1 # g2      | グループ2 # g3      | グループ3 # # [belongテーブル] # group_id  | user_id   | status # ---------+---------+------ # g1      | u1     | 1 # g2      | u2     | 0 # g2      | u3     | 1 # g2      | u4     | 1 # # このようなテーブルから、下記のように # group_name | user_count # -----------+----------- # グループ1  | 1 # グループ2  | 2 # グループ3  | 0 # 各グループ毎の「belong.status = 1」の所属ユーザ数を取得したいです。 # group(g1,グループ1). group(g2,グループ2). group(g3,グループ3). belong(g1,u1,1). belong(g2,u2,0). belong(g2,u3,1). belong(g2,u4,1). ?- group(_group_id,_group_name), count(belong(_group_id,_,1),Sum), write_formatted('%t | %t\n',[_group_name,Sum]), fail; true. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1252492296/307 # # # 業務テーブル G_info # 業務ID | 業務名 | # G0001 | ○○設計 | # G0002 | ××調査 | # G0003 | ○△設計 | # # 業務担当テーブル G_charge # 業務ID | 役割 | 社員ID # G0001 | 管理 | P101 # G0001 | 検査 | P103 # G0001 | 設計 | P105 # G0002 | 管理 | P102 # G0002 | 検査 | P103 # G0002 | 設計 | P106 # G0003 | 管理 | P101 # G0003 | 検査 | P104 # G0003 | 設計 | P107 # # こんなテーブル構成だったとして、 # 設計 = P101 かつ 検査 = P103 の担当者を持つ業務名を取り出すにはどのようにすれば良いのでしょうか? ?- 業務テーブル(A,X),業務担当テーブル(A,設計,'P101'),業務担当テーブル(A,検査,'P103'). '>>459のテーブル表示ファイルからテーブルを抜き取り述語として定義する'(_ファイル) :- get_split_lines(_ファイル,[' ','|'],Lines), 一つ以上のテーブルを述語として定義(Lines). 一つ以上のテーブルを述語として定義(Lines) :- append(_,[[A,B]|L2],Lines), append([_|L3],[''|L4],L2), sub_atom(A,_,_,_,_テーブル名,テーブル,_,_,_,_), テーブルを述語として定義(_テーブル名,L3), 一つ以上のテーブルを述語として定義(L4). 一つ以上のテーブルを述語として定義(_). テーブルを述語として定義(_テーブル,L) :- member(L1,L), P =.. [_テーブル|L1], assertz(P), fail. テーブルを述語として定義(_,_). % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/db/1081818145/493 # # # 同一テーブル構成のTBL-A、TBL-Bがの2つがあります。 # テーブルレイアウトは、 # 基準日   int(8) # 社員番号  int(10) # 構成     int(10) # だとします。 # # TBL-AとTBL-Bを比較し、以下のことをSQLでやりたいんですが、何か関数等あるんでしょうか? # (1)社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加 # (2)社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き # (3)社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない # (4)社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない 社員構成管理(_社員番号) :- '社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない'(_社員番号),!. 社員構成管理(_社員番号) :- '社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない'(_社員番号),!. '社員番号がTBL-Aに在ってTBL-Bに無い場合-->TBL-Bに該当レコード追加'(_社員番号) :- 'TBL-A'(_基準日,_社員番号,_構成), \+('TBL-B'(_,_社員番号,_)), assertz('TBL-B'(_基準日,_社員番号,_構成)). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以降の場合-->TBL-Bの該当レコードをTBL-Aで上書き'(_社員番号) :- 'TBL-A'(_基準日A,_社員番号,_構成A), 'TBL-B'(_基準日B,_社員番号,_構成B), _基準日A @> _基準日B, retract('TBL-B'(_基準日B,_社員番号,_構成B)), assertz('TBL-B'(_基準日A,_社員番号,_構成A)). '社員番号が両方に存在し、TBL-Aの基準日がTBL-Bの基準日以前の場合-->何もしない'(_社員番号) :- 'TBL-A'(_基準日A,_社員番号,_構成A), 'TBL-B'(_基準日B,_社員番号,_構成B), _基準日A @=< _基準日B. '社員番号がTBL-Bに在ってTBL-Aに無い場合-->何もしない'(_社員番号) :- 'TBL-B'(_,_社員番号,_), \+('TBL-A'(_,_社員番号,_)). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1247636661/364 # # 質問です。 # # 入退室の時間を自分で打ち込んで、それをデータとして貯めるというシステムを作りたいんですが、こういうシステムを # 作る場合はPHPとMySQLで作れるんでしょうか。よろしくお願いします。 # 入退室 :- もっとも新しい入退室保存ファイル(File), reconsult(File). 入室(_氏名) :- A is time, localtime(A,B,_月,_日,_,_,_時,_分,_秒), assertz(入退室(入室,_氏名,_年,_月,_日,_時,_分,_秒)), 入退室情報を保護する. 退室(_氏名) :- A is time, localtime(A,B,_月,_日,_,_,_時,_分,_秒), assertz(入退室(退室,_氏名,_年,_月,_日,_時,_分,_秒)), 入退室情報を保護する. 入退室情報を保護する :- 入退室保存ファイル(_,_入退室保存ファイル), tell(_入退室保存ファイル), listing(入退室), told,!. %%%% 以下はPrologデータベースのセーブ/世代管理 %%%% 入退室管理ディレクトリ('/var/nyutaishitsu/'). もっとも新しい入退室保存ファイル(File) :- 入退室管理ディレクトリ(Dir), concat_atom(['ls -N ',Dir,'listing.*.pro'],S), shs(S,L), \+(L=[]), max(L,File),!. もっとも新しい入退室保存ファイル(File) :- 入退室保存ファイル(_,File),!. 入退室保存ファイル(OldF,NewF) :- 入退室管理ディレクトリ(Dir), concat_atom(['ls -N ',Dir,'listing.*.pro'],S), shs(S,L), \+(L=[]), max(L,OldF), sub_atom(OldF,_,6,4,A), atom_to_term(A,N,_), N2 is N + 1, concat_atom([Dir,'lsiting.',N2,'.pro'],NewF),!. 入退室保存ファイル(_,NewF) :- 入退室管理ディレクトリ(Dir), concat_atom([Dir,'listing.100000.pro],NewF), tell(NewF), told. % 以下のサイトは 相関係数(L1,L2,Len,_相関係数) :- length(L1,Len), Len > 1, sum(L1,Sum1), sum(L2,Sum2), avg(L1,Avg1), avg(L2,Avg2), 相関係数(L1,Avg1,L2,Avg2,0.0,SX,0.0,SY,0.0,R1), SX1 is sqrt(SX / (Len - 1)), SY1 is sqrt(SY / (Len - 1)), _相関係数 is R1 / (Len - 1) * SX1 * SY1. 相関係数([],_,[],_,SX,SX,SY,SY,R,R). 相関係数([A1|LR1],Avg1,[A2|LR2],Avg2,SX1,SX,SY1,SY,R1,R) :- R2 is (A1 - Avg1) * (B1 - Avg2) + R1, SX2 is SX1 + sqr(A1 - Avg1), SY2 is SY1 + sql(A2 - Avg2), 相関係数(LR1,Avg1,LR2,Avg2,SX2,SX,SY2,SY,R2,R). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1247438792/473 # # [1] 授業単元:プログラミング論 # [2] 問題文:入力ストリームから読み込んだデータ文字列を、 # データベースに格納する前にキューに一時的に格納するプログラムを # 作成する。このとき、データをまとめたデータ文字列を一つずつ、キューへ # エンキューしたり、デキューしたりする過程が分かるプログラムを作成する。 # なお、キューを実現するライブラリは、キューのための別のヘッダにまとめる。 # [そのほか] # ・入力ストリームから読み込んだデータ文字列を、キューにエンキューしたり、 # デキューしたりするたびにデータベースに格納された全データを表示する。 # ・構造体オブジェクトは動的な記憶域に生成する。 # ・生徒の名前、試験の点数を構造体オブジェクトに格納することとする。 # ・関数の処理にコメントをつけて、キューをどのように実現しているか、 # そのプログラムの処理内容が分かるようにする。 # [このプログラムの流れ] # (1)ファイルやキーボードなどの入力ストリームから # データをデータ文字列として読み込む # (2)このデータ文字列をキューに一時的に蓄える # (3)キューからデータ文字列を取り出す # (4)このデータ文字列からそれぞれデータを取り出して # 文字列や数値データに変換する # (5)変換したデータをデータベース(構造体の配列など)に # 格納してまとめて管理する # (6)このデータベースからデータを参照し、ディスプレイに出力する % 作られたキューは引数として持ち回る t561(Instrem,Q2) :- 新しいキューを作る(Q1), get_char(Instream,Char), t561_2(Instream,Char,_文字列,_終了文字), t561_1(Instream,文字列,_終了文字,Q1,Q2), listing(データベース). t561_1(Instream,_,end_of_file,Q,Q) :- !. t561_1(Instream,_文字列,'\n',Q1,Q2) :- キューに要素を追加する(_文字列,Q1,Q3), キューが空になるまで連続して取り出す(L,Q3,Q2), P =.. [データベース|L], assertz(P), listing(データベース),!. t561_1(Instream,_文字列,_区切り文字,Q1,Q2) :- member(_区切り文字,[' ',',']), キューに要素を追加する(_文字列,Q1,Q3), get_char(Instream,C