2017-01-04 4 views
0

Wie würde ich SELECT in einer MySQL-Tabelle ausführen, wo ich eine Spalte mit dem Wert 0 für alle Zeilen mit Ausnahme der letzten Zeile erstellen würde, die als 1 markiert wäre. Ist es überhaupt möglich? ?Letzte Zeile als Spalte in MySQL markieren

Beispiel:

Realtabellen:

+----+----------------------+ 
    | id | schedule_name  | 
    +----+----------------------+ 
    | 1 | Global Fee Schedule | 
    | 2 | CAT Fee Schedule  | 
    | 3 | Daily Fee Schedule | 
    | 4 | Daily Claim Schedule | 
    | 5 | Wind/Hail Schedule | 
    | 6 | Daily Claim Schedule | 
    | 7 | Daily Claims   | 
    | 8 | CAT Fee Schedule  | 
    | 9 | Daily Claims   | 
    | 10 | Daily Claims   | 
    +----+----------------------+ 

mit zugesetztem Säule:

+----+----------------------+-------------+ 
    | id | schedule_name  | last_column | 
    +----+----------------------+-------------+ 
    | 1 | Global Fee Schedule |   0 | 
    | 2 | CAT Fee Schedule  |   0 | 
    | 3 | Daily Fee Schedule |   0 | 
    | 4 | Daily Claim Schedule |   0 | 
    | 5 | Wind/Hail Schedule |   0 | 
    | 6 | Daily Claim Schedule |   0 | 
    | 7 | Daily Claims   |   0 | 
    | 8 | CAT Fee Scedule  |   0 | 
    | 9 | Daily Claims   |   0 | 
    | 10 | Daily Claims   |   1 | 
    +----+----------------------+-------------+ 
+0

Sie definieren den neuen Spalten Wert als die Summe der occurrances eines Wertes in der Spalte 'schedule_name' minus 1. – arkascha

+0

*„Wie würde ich mich über eine MySQL-Tabelle SELECT tun, wo ich eine Spalte schaffen würde“* - Ich verstehe diesen Teil nicht; "erstellen"? –

+0

SELECT *, IF (Formel weiß nicht) last_column FROM iascat_fee_categories LIMIT 10; – user1529918

Antwort

1

können Sie max-Funktion verwenden. Zum Beispiel:

select *, id=(select max(id) from YOUR_TAB) as last_column from YOUR_TAB 
+0

Dieser arbeitet nicht mit LIMIT – user1529918

+0

Setzen Sie Max auf Unterabfrage - wählen Sie *, ID = wählen Sie max (ID) von (ID aus DEIN_TAB Limit 5 wählen) T als letzte_Spalte von IHR_TAB begrenzen 5 – meet

+0

Noch kein JOY MAX ist anscheinend egal limit – user1529918

0

Nicht sicher, warum Sie so etwas brauchen sollten. Aber das ist möglich, aber nicht sehr einfach.

erstellen/Daten einfügen

CREATE TABLE iascat_fee_categories 
    (`id` INT, `schedule_name` VARCHAR(20)) 
; 

INSERT INTO iascat_fee_categories 
    (`id`, `schedule_name`) 
VALUES 
    (1, 'Global Fee Schedule'), 
    (2, 'CAT Fee Schedule'), 
    (3, 'Daily Fee Schedule'), 
    (4, 'Daily Claim Schedule'), 
    (5, 'Wind/Hail Schedule'), 
    (6, 'Daily Claim Schedule'), 
    (7, 'Daily Claims'), 
    (8, 'CAT Fee Schedule'), 
    (9, 'Daily Claims'), 
    (10, 'Daily Claims') 
; 

Die SELECT-Abfrage, die die LAST_COLUMN markiert als 1 ziemlich komplex ist.

Select LIMIT 0, 10

SELECT 
    iascat_fee_categories.id 
, iascat_fee_categories.schedule_name 
, IF((max_id_counts.max_sum_id_count + 0)= iascat_fee_categories.id, 1, 0) last_column 
FROM (
    SELECT 
    SUM(id_counts.id_count) max_sum_id_count 
    FROM (
    SELECT 
     COUNT(*) id_count 
    FROM 
     iascat_fee_categories 
    GROUP BY 
     iascat_fee_categories.id 
    LIMIT 0, 10 
) AS id_counts 
) AS max_id_counts 
CROSS JOIN 
    iascat_fee_categories 
LIMIT 0, 10 

Ausgabe

id schedule_name   last_column 
------ -------------------- ------------- 
    1 Global Fee Schedule    0 
    2 CAT Fee Schedule     0 
    3 Daily Fee Schedule    0 
    4 Daily Claim Schedule    0 
    5 Wind/Hail Schedule    0 
    6 Daily Claim Schedule    0 
    7 Daily Claims      0 
    8 CAT Fee Schedule     0 
    9 Daily Claims      0 
    10 Daily Claims      1 

Aber wenn Sie LIMIT SELECT 1, 10 die Auswahlabfrage ändert. Bitte beachten Sie müssen auch 2 IF((max_id_counts.max_sum_id_count + 0) zu IF((max_id_counts.max_sum_id_count + 1) Und ofcource beiden LIMIT Aussagen

und mit ausgewählten LIMIT diesen Teil aktualisieren, 10 müssen Sie die Änderung, die zu IF((max_id_counts.max_sum_id_count + 2) Und ofcource beiden LIMIT Aussagen

SELECT LIMIT 1, 10

SELECT 
    Table1.id 
, Table1.schedule_name 
, IF((max_id_counts.max_sum_id_count + 1)= iascat_fee_categories.id, 1, 0) last_column 
FROM (
    SELECT 
    SUM(id_counts.id_count) max_sum_id_count 
    FROM (
    SELECT 
     COUNT(*) id_count 
    FROM 
     iascat_fee_categories 
    GROUP BY 
     Table1.id 
    LIMIT 1, 10 
) AS id_counts 
) AS max_id_counts 
CROSS JOIN 
    iascat_fee_categories 
LIMIT 1, 10 

Output

id schedule_name   last_column 
------ -------------------- ------------- 
    2 CAT Fee Schedule     0 
    3 Daily Fee Schedule    0 
    4 Daily Claim Schedule    0 
    5 Wind/Hail Schedule    0 
    6 Daily Claim Schedule    0 
    7 Daily Claims      0 
    8 CAT Fee Schedule     0 
    9 Daily Claims      0 
    10 Daily Claims      1 
Verwandte Themen