Thanks Rami,

unique key for
ANLKURSE is over ANLDETAIL_WKN and DATUM  (ID and date)
TICKER is ANLDETAIL_WKN

Your query does not show the result for every ID.

I came up with the following solution. It is fast but I don't like it
because in case I need data from another column of ANLKURSE the GROUP
BY clause will be a problem. I would have to add some more JOINS on
top:


SELECT
    TICKER.ANLDETAIL_WKN,
    VORLETZTER.VORLETZTER_DATUM,
    VORLETZTER.LETZTER_DATUM
FROM
    TICKER
INNER JOIN
    (
        SELECT
            MAX(DATUM) AS VORLETZTER_DATUM,
            LETZTER_DATUM,
            ANLDETAIL_WKN
        FROM
            ANLKURSE
        INNER JOIN
            (
                SELECT
                    MAX(DATUM) AS LETZTER_DATUM,
                    ANLDETAIL_WKN AS LETZTER_WKN
                FROM
                    ANLKURSE
                GROUP BY
                    ANLDETAIL_WKN
            ) AS LETZTER
                ON LETZTER.LETZTER_WKN = ANLKURSE.ANLDETAIL_WKN
                AND LETZTER.LETZTER_DATUM <> ANLKURSE.DATUM
        GROUP BY
            ANLDETAIL_WKN) AS VORLETZTER
                ON VORLETZTER.ANLDETAIL_WKN = TICKER.ANLDETAIL_WKN;


script for a test db ->

SET CLUSTER '';
SET DEFAULT_TABLE_TYPE 0;
SET WRITE_DELAY 500;
SET DEFAULT_LOCK_TIMEOUT 2000;
SET CACHE_SIZE 16384;
;
CREATE USER IF NOT EXISTS XY PASSWORD '' ADMIN;
CREATE SEQUENCE
PUBLIC.SYSTEM_SEQUENCE_547EF21C_5CAB_4AD2_8ED4_B85103E8CB7B START WITH
529 BELONGS_TO_TABLE;
CREATE SEQUENCE
PUBLIC.SYSTEM_SEQUENCE_F1EDB90A_3E59_4C50_BE7F_67E7BFABB2CF START WITH
136 BELONGS_TO_TABLE;
CREATE SEQUENCE
PUBLIC.SYSTEM_SEQUENCE_14A944B3_8EC2_488B_A30D_22510B08BEC7 START WITH
120 BELONGS_TO_TABLE;
CREATE CACHED TABLE PUBLIC.TICKER(
    ANLDETAIL_WKN VARCHAR(25) NOT NULL SELECTIVITY 100
);
ALTER TABLE PUBLIC.TICKER ADD CONSTRAINT PUBLIC.CONSTRAINT_17 PRIMARY
KEY(ANLDETAIL_WKN);
-- 2 +/- SELECT COUNT(*) FROM PUBLIC.TICKER;
INSERT INTO PUBLIC.TICKER(ANLDETAIL_WKN) VALUES
('855018'),
('620200');
CREATE CACHED TABLE PUBLIC.ANLKURSE(
    ANLDETAIL_WKN VARCHAR(25) NOT NULL SELECTIVITY 1,
    KURS DECIMAL(10, 4) DEFAULT 0 SELECTIVITY 72,
    DATUM DATE NOT NULL SELECTIVITY 37
);
ALTER TABLE PUBLIC.ANLKURSE ADD CONSTRAINT PUBLIC.CONSTRAINT_1 PRIMARY
KEY(ANLDETAIL_WKN, DATUM);
-- 20 +/- SELECT COUNT(*) FROM PUBLIC.ANLKURSE;
INSERT INTO PUBLIC.ANLKURSE(ANLDETAIL_WKN, KURS, DATUM) VALUES
('620200', 36.1600, DATE '2012-05-29'),
('855018', 46.4300, DATE '2012-05-29'),
('855018', 45.0000, DATE '2012-05-28'),
('855018', 43.8500, DATE '2012-05-25'),
('855018', 44.0000, DATE '2012-05-24'),
('855018', 42.7900, DATE '2012-05-23'),
('855018', 45.1500, DATE '2012-05-22'),
('855018', 43.0300, DATE '2012-05-21'),
('620200', 35.3600, DATE '2012-05-28'),
('620200', 34.8900, DATE '2012-05-25'),
('620200', 35.5900, DATE '2012-05-24'),
('620200', 35.5000, DATE '2012-05-23'),
('620200', 36.8000, DATE '2012-05-22'),
('620200', 36.0000, DATE '2012-05-21'),
('620200', 35.3300, DATE '2012-05-30'),
('855018', 44.6500, DATE '2012-05-30'),
('620200', 34.6300, DATE '2012-05-31'),
('620200', 34.3400, DATE '2012-06-01'),
('855018', 43.0600, DATE '2012-06-01'),
('840400', 72.8500, DATE '2012-05-31');
CREATE INDEX PUBLIC.ANLKURSE_DATUM ON PUBLIC.ANLKURSE(DATUM);
CREATE INDEX PUBLIC.ANLKURSE_KURS ON PUBLIC.ANLKURSE(KURS);
CREATE INDEX PUBLIC.ANLKURSE_ANLDETAIL_WKN ON
PUBLIC.ANLKURSE(ANLDETAIL_WKN);

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to